Socket C
senynium
-
Senynium -
Senynium -
Slt la compagnie !!!
J'ai un super pb en c, au niveau des sockets. En fait sur le serveur, le programme ne continue pa apres le listen (pas d'entréé ds la boucle pour accepter les connections) mon code :
void main()
{
WSADATA WSAData;
(WSAStartup(MAKEWORD(2,0), &WSAData)
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;
char *buffer = new char[255];
int i;
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
sin.sin_family = AF_INET;
sin.sin_port = htons(2500);
if ((bind(sock, (SOCKADDR *)&sin, sizeof(sin))) == 0)
{ cout << "Bind" << endl ;}
if ((listen(sock, 3)) == 0)
{ cout << "Listen" << endl ;}
cout <<"Ecoute" <<endl;
Jusque là, tout marche bien et ensuite, plus rien.
J'ai ajouté le "cout " précédent pour verifier k'il n'y avait pa d'arret mais rien, la ligne produit l'affichage, et ce qui suit ne s'execute pa :
for(;;)
{
cout << "Entree de boucle";
int sinsize = sizeof(csin);
if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
{
recv(csock, buffer, sizeof(buffer), 0);
cout << "Salut " << *buffer;
}
else
{ cout << "Refus" << endl ;
exit(0);}
}
}
SVP, kelk'un pour m'aider et viiiiittttttte !!!!!!!!!!
J'ai un super pb en c, au niveau des sockets. En fait sur le serveur, le programme ne continue pa apres le listen (pas d'entréé ds la boucle pour accepter les connections) mon code :
void main()
{
WSADATA WSAData;
(WSAStartup(MAKEWORD(2,0), &WSAData)
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;
char *buffer = new char[255];
int i;
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
sin.sin_family = AF_INET;
sin.sin_port = htons(2500);
if ((bind(sock, (SOCKADDR *)&sin, sizeof(sin))) == 0)
{ cout << "Bind" << endl ;}
if ((listen(sock, 3)) == 0)
{ cout << "Listen" << endl ;}
cout <<"Ecoute" <<endl;
Jusque là, tout marche bien et ensuite, plus rien.
J'ai ajouté le "cout " précédent pour verifier k'il n'y avait pa d'arret mais rien, la ligne produit l'affichage, et ce qui suit ne s'execute pa :
for(;;)
{
cout << "Entree de boucle";
int sinsize = sizeof(csin);
if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
{
recv(csock, buffer, sizeof(buffer), 0);
cout << "Salut " << *buffer;
}
else
{ cout << "Refus" << endl ;
exit(0);}
}
}
SVP, kelk'un pour m'aider et viiiiittttttte !!!!!!!!!!
7 réponses
Slt, j'arrive toujours pas à faire marcher.
En fait je ne trouve aucune documentation sur le "fork" comme indiqué.
SVP, indiquer moi un endroit ou trouver de la doc, sur le fork, et meme sur les sockets, ca urge !!!!!
PS : J'utilise Visual C++ pour mon developpement .
En fait je ne trouve aucune documentation sur le "fork" comme indiqué.
SVP, indiquer moi un endroit ou trouver de la doc, sur le fork, et meme sur les sockets, ca urge !!!!!
PS : J'utilise Visual C++ pour mon developpement .
holala les sockets j'en ai fait y'a longtemps et j'ai oublié
par contre il te manque pas une boucle while ???
le code d'un serveur c'est toujours un truc du style:
while (1) // le serveur ne doit en theorrie JAMAIS s'arreter
{
socket = accept(...);
if (socket.valide)
liste.add(socket);
foreach (s in liste)
{
message = s.read(..);
printf("recu " + message + " de " + s);
}
}
par contre il te manque pas une boucle while ???
le code d'un serveur c'est toujours un truc du style:
while (1) // le serveur ne doit en theorrie JAMAIS s'arreter
{
socket = accept(...);
if (socket.valide)
liste.add(socket);
foreach (s in liste)
{
message = s.read(..);
printf("recu " + message + " de " + s);
}
}
Ce serait vraiment sympa
Tu pourrais egalement m'indiquer s'il est fonctionnel avec Visual C++ (, enfin sous windows).
J'attends ...
Tu pourrais egalement m'indiquer s'il est fonctionnel avec Visual C++ (, enfin sous windows).
J'attends ...
Bonjour,
Je viens de tester ton programme (tel quel) avec Visual Studio 6.0 et je n'ai pas reproduit ton problème.
Le message "Entrée de boucle" s'affiche correctement et la fonction "accept" bloque en attendant (car ton socket est bloquant) une connexion. Un fonctionnement normal.
Si le message "Ecoute" s'affiche et pas "Entrée de boucle" quand tu exécutes ton programme, alors je ne peux pas t'aider.
Un petit conseil, essaie d'exécuter ton programme "pas à pas" pour bien comprendre ce qu'il se passe.
Bon courage.
Chris
Je viens de tester ton programme (tel quel) avec Visual Studio 6.0 et je n'ai pas reproduit ton problème.
Le message "Entrée de boucle" s'affiche correctement et la fonction "accept" bloque en attendant (car ton socket est bloquant) une connexion. Un fonctionnement normal.
Si le message "Ecoute" s'affiche et pas "Entrée de boucle" quand tu exécutes ton programme, alors je ne peux pas t'aider.
Un petit conseil, essaie d'exécuter ton programme "pas à pas" pour bien comprendre ce qu'il se passe.
Bon courage.
Chris
Salut,
pour vous dire merci à tous. J'ai gardé mon code et reinstallé mon système. Maintenant tout fonctionne bien.
Merci pour votre aide, c'était chouette !!!
pour vous dire merci à tous. J'ai gardé mon code et reinstallé mon système. Maintenant tout fonctionne bien.
Merci pour votre aide, c'était chouette !!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
salut
je cherche un code de client/serveur pour windows pourrais tu me doner des pistes sur ton programme?
merci d'avance
je cherche un code de client/serveur pour windows pourrais tu me doner des pistes sur ton programme?
merci d'avance
Salut,
le code que j'ai deposé est celui du serveur.
Les lignes avant la boucle for permettent d'initialiser le socket et le mettre à l'écoute. Pour ce qui est de la boucle, com tu t'en doutes, elle permet une execution continue.
J'aimerais plus t'aider mais il faudra que tu me dises ce que tu recherches exactement.
Si tu veux un cours sur les sockets, vois à cette adresse :
http://c.developpez.com/WalrusSock/
je crois que tu y trouveras ce que tu cherches
le code que j'ai deposé est celui du serveur.
Les lignes avant la boucle for permettent d'initialiser le socket et le mettre à l'écoute. Pour ce qui est de la boucle, com tu t'en doutes, elle permet une execution continue.
J'aimerais plus t'aider mais il faudra que tu me dises ce que tu recherches exactement.
Si tu veux un cours sur les sockets, vois à cette adresse :
http://c.developpez.com/WalrusSock/
je crois que tu y trouveras ce que tu cherches
en VC++ je crois que c'est CreateThread et les fonctions apparentées qu'il faut utiliser .