
Client/Serveur
9 messages
• Page 1 sur 1
Client/Serveur
donc je désire faire un reseau client/serveur
et je bute sur des problème assez bizzare
si vous pouvez m'eclairer sur des betise faire ou bien si vous pouvez m'aider a corriger quelque probleme merci .
#include<string>
#include<iostream>
using namespace std;
#include <stdio.h>
#include "winsock2.h"
void main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port = htons(5500);
if(bind(sock, (SOCKADDR *)&sin, sizeof(sin)) < 0)
cout<<"error bind";
else
cout<<"bind ok";
if(listen(sock, 0)<0)
cout<<"erreur de listen";
else
cout<<"listen ok";
while(true)
{
int sinsize = sizeof(csin);
if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
{
if(send(csock, "yes!", 4, 0)<0)
cout<<"error send";
else
cout<<"send ok !";
}
}
}
il s'agit d'un serveur banal mais cependant il me provoque beaucoup d'erreur de ce genre :
Erreur 1 error LNK2019: symbole externe non résolu __imp__send@16 référencé dans la fonction _main main.obj
Erreur 2 error LNK2019: symbole externe non résolu __imp__accept@12 référencé dans la fonction _main main.obj
Erreur 3 error LNK2019: symbole externe non résolu __imp__listen@8 référencé dans la fonction _main main.obj
Erreur 4 error LNK2019: symbole externe non résolu __imp__bind@12 référencé dans la fonction _main main.obj
Erreur 5 error LNK2019: symbole externe non résolu __imp__htons@4 référencé dans la fonction _main main.obj
Erreur 6 error LNK2019: symbole externe non résolu __imp__socket@12 référencé dans la fonction _main main.obj
Erreur 7 error LNK2019: symbole externe non résolu __imp__WSAStartup@8 référencé dans la fonction _main main.obj
Erreur 8 error LNK2019: symbole externe non résolu _WinMain@16 référencé dans la fonction ___tmainCRTStartup MSVCRTD.lib
Erreur 9 fatal error LNK1120: 8 externes non résolus C:\Users\nando\Documents\Visual Studio 2008\Projects\serveur\Debug\serveur.exe
et je bute sur des problème assez bizzare
si vous pouvez m'eclairer sur des betise faire ou bien si vous pouvez m'aider a corriger quelque probleme merci .
#include<string>
#include<iostream>
using namespace std;
#include <stdio.h>
#include "winsock2.h"
void main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port = htons(5500);
if(bind(sock, (SOCKADDR *)&sin, sizeof(sin)) < 0)
cout<<"error bind";
else
cout<<"bind ok";
if(listen(sock, 0)<0)
cout<<"erreur de listen";
else
cout<<"listen ok";
while(true)
{
int sinsize = sizeof(csin);
if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
{
if(send(csock, "yes!", 4, 0)<0)
cout<<"error send";
else
cout<<"send ok !";
}
}
}
il s'agit d'un serveur banal mais cependant il me provoque beaucoup d'erreur de ce genre :
Erreur 1 error LNK2019: symbole externe non résolu __imp__send@16 référencé dans la fonction _main main.obj
Erreur 2 error LNK2019: symbole externe non résolu __imp__accept@12 référencé dans la fonction _main main.obj
Erreur 3 error LNK2019: symbole externe non résolu __imp__listen@8 référencé dans la fonction _main main.obj
Erreur 4 error LNK2019: symbole externe non résolu __imp__bind@12 référencé dans la fonction _main main.obj
Erreur 5 error LNK2019: symbole externe non résolu __imp__htons@4 référencé dans la fonction _main main.obj
Erreur 6 error LNK2019: symbole externe non résolu __imp__socket@12 référencé dans la fonction _main main.obj
Erreur 7 error LNK2019: symbole externe non résolu __imp__WSAStartup@8 référencé dans la fonction _main main.obj
Erreur 8 error LNK2019: symbole externe non résolu _WinMain@16 référencé dans la fonction ___tmainCRTStartup MSVCRTD.lib
Erreur 9 fatal error LNK1120: 8 externes non résolus C:\Users\nando\Documents\Visual Studio 2008\Projects\serveur\Debug\serveur.exe
- Nahmani
Re: Client/Serveur
il semblerait qu'il me manque une librairie.
j'ai reinstallée visual studio mais le problème persiste
j'ai reinstallée visual studio mais le problème persiste
- Invité
Re: Client/Serveur
problème résolu
il fallait rajouter la librairie ws2_32.lib dans les linker.
de plus il ne fallait pas crée dans un projet console32 mais un projet simple
il fallait rajouter la librairie ws2_32.lib dans les linker.
de plus il ne fallait pas crée dans un projet console32 mais un projet simple
- nahmani
Re: Client/Serveur
Content de voir que j'ai été utile sur ce coup 
Bon courage pour la suite !

Bon courage pour la suite !
- Tibo
- Administrateur du site
- Messages: 147
- Inscription: 26 Mar 2008, 13:58
Re: Client/Serveur
bon alors je suis passer a quelque chose de plus avancé.
j'avai repris le msn que on avait fait en cours simplement pour me familiariser et mieux comprendre le tout j'ai voulu mettre 2 thread dans le client et le serveur un pour l'ecoute en continu et un pour l'ecriture et l'emission.
simplement les thread ne se reconnaisse pas voyer si vous pouvez m'eclaircir.
le .h:
le fichier .cpp
je passe tout les detail je met juste les thread crée .
et le main:
voila.
je pense que pour que il n'y ai pas de bug le mieux serai qu'a chaque envoi j'efface la valeur de" phrase" pour pas envoyer des envoi répéter et de mettre une sécurité pour éviter cela
sinon dans les erreur actuel il ne reconnait pas emission et reception pourquoi ?
j'avai repris le msn que on avait fait en cours simplement pour me familiariser et mieux comprendre le tout j'ai voulu mettre 2 thread dans le client et le serveur un pour l'ecoute en continu et un pour l'ecriture et l'emission.
simplement les thread ne se reconnaisse pas voyer si vous pouvez m'eclaircir.
le .h:
- Code: Tout sélectionner
#pragma once
#include<winsock2.h>
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
class Connexion
{
protected:
SOCKET monSocket;
public:
static DWORD WINAPI reception(LPVOID param);
static DWORD WINAPI emission(LPVOID param);
Connexion();
~Connexion();
void servir();
void contacter(string);
void envoyer(string);
string recevoir();
};
le fichier .cpp
je passe tout les detail je met juste les thread crée .
- Code: Tout sélectionner
DWORD WINAPI Connexion::reception(LPVOID param)
{
Connexion *C=(Connexion*)param;
while(phrase!="bye")
{
cout<<C->recevoir();
}
return 1;
};
DWORD WINAPI Connexion::emission(LPVOID param)
{
Connexion *C=(Connexion*)param;
while(phrase!="bye")
{
getline(cin,phrase);
C->envoyer(phrase);
}
return 1;
};
et le main:
- Code: Tout sélectionner
#include "Connexion.h"
void main()
{
Connexion c;
string phrase;// declare une phrase
c.servir();//permet de recevoir des client
//c.contacter("127.0.0.1"); si je veut devenir client et enlever c.servir();
cout<<"serveur dit"<<endl;
getline(cin,phrase);
c.envoyer(phrase);
while(phrase!="bye")
{
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)reception,NULL,NULL,NULL);
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)emission,NULL,NULL,NULL);
}
cout<<"attent d'un message"<<endl;
cout<<c.recevoir()<<endl;
};
voila.
je pense que pour que il n'y ai pas de bug le mieux serai qu'a chaque envoi j'efface la valeur de" phrase" pour pas envoyer des envoi répéter et de mettre une sécurité pour éviter cela
sinon dans les erreur actuel il ne reconnait pas emission et reception pourquoi ?
- nahmani
Re: Client/Serveur
Salut,
j'ai pas compris ce que tu voulais faire...
En tout cas, ce que tu as fait pour l'instant n'est pas bon du tout ! Juste sur la boucle principale :
Comme CreateThread est une fonction qui lance le processus puis continue l'exécution, tu es en train de lancer des millions de processus !
Ensuite, je ne comprend pas pourquoi tu as besoin de 3 threads (le main, reception et emission ?)
Pour moi, deux aurait été suffisant ! Explique moi pourquoi tu penses que c'est utile.
Voila pour les erreurs de logiques (plus importantes)
Pour ce qui est du compilateur qui ne te reconnait pas reception et emission, c'est parce qu'il faut donner le nom complet :
Connexion::reception
j'ai pas compris ce que tu voulais faire...
En tout cas, ce que tu as fait pour l'instant n'est pas bon du tout ! Juste sur la boucle principale :
- Code: Tout sélectionner
while(phrase!="bye")
{
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)reception,NULL,NULL,NULL);
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)emission,NULL,NULL,NULL);
}
Comme CreateThread est une fonction qui lance le processus puis continue l'exécution, tu es en train de lancer des millions de processus !
Ensuite, je ne comprend pas pourquoi tu as besoin de 3 threads (le main, reception et emission ?)
Pour moi, deux aurait été suffisant ! Explique moi pourquoi tu penses que c'est utile.
Voila pour les erreurs de logiques (plus importantes)
Pour ce qui est du compilateur qui ne te reconnait pas reception et emission, c'est parce qu'il faut donner le nom complet :
Connexion::reception
- Tibo
- Administrateur du site
- Messages: 147
- Inscription: 26 Mar 2008, 13:58
Re: Client/Serveur
oui j'avai aussi corriger les erreur de placement des thread .
en faite ce que je veut c'est que pendant que le thread principale attend patiemment les 2 autre thread envoi en continu les phrase ecrite et l'autre thread écoute tout le temp des que une phrase est écrite.
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)reception,NULL,NULL,NULL);
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)emission,NULL,NULL,NULL);
while(phrase!="bye")
{
Sleep(10);
}
en faite ce que je veut c'est que pendant que le thread principale attend patiemment les 2 autre thread envoi en continu les phrase ecrite et l'autre thread écoute tout le temp des que une phrase est écrite.
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)reception,NULL,NULL,NULL);
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)emission,NULL,NULL,NULL);
while(phrase!="bye")
{
Sleep(10);
}
- nahmani
Re: Client/Serveur
D'accord, mais dans ce cas, t'es d'accord pour dire que le main ne sert plus à rien (toutes les 10 millisecondes, il teste si on a reçu "bye"...
L'idée serait plutôt d'avoir un thread qui envoit tout le temps et le main qui fait uniquement la reception (ou l'inverse, c'est pareil)
Dans tous les cas, tu n'as besoin que d'un seul thread (en plus du thread principal).
Mais bon, je ne vois pas trop le rapport avec ton projet...
L'idée serait plutôt d'avoir un thread qui envoit tout le temps et le main qui fait uniquement la reception (ou l'inverse, c'est pareil)
Dans tous les cas, tu n'as besoin que d'un seul thread (en plus du thread principal).
Mais bon, je ne vois pas trop le rapport avec ton projet...
- Tibo
- Administrateur du site
- Messages: 147
- Inscription: 26 Mar 2008, 13:58
Re: Client/Serveur
si tout fonctionne j'aurai la structure pour mon projet.
car je vais avoir besoin d'un thread a mon avis a part si mon binome m'envoie en meme temp les donnée a l'ascenseur au reseau je vais voir sa .
(au pire ca me permet d'apprendre comment ca fonctionne le reseau)
car je vais avoir besoin d'un thread a mon avis a part si mon binome m'envoie en meme temp les donnée a l'ascenseur au reseau je vais voir sa .
(au pire ca me permet d'apprendre comment ca fonctionne le reseau)
- nahmani
9 messages
• Page 1 sur 1
Retourner vers Programmation réseau
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité