Socket C

Fermé
senynium - 4 sept. 2003 à 18:09
 Senynium - 26 nov. 2003 à 09:25
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 !!!!!!!!!!

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 .
1
fork c'est en UNIX

en VC++ je crois que c'est CreateThread et les fonctions apparentées qu'il faut utiliser .
0
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);
}



}
0
Slt,
En fait, le pb n'est pas fonction de le boucle, car autant avec "While" (ton code) qu'avec "for"(le mien) ca ne marche pas
0
mirza > senynium
5 sept. 2003 à 08:40
très juste

désolé

j'avais lu trop vide ton code ...


A mon avis il manque un 'fork' (cf doc C) qui permet d'excecuter simultanement le code du pere (serveur) et des fils (vraies connexions des clients)
0
Ce serait vraiment sympa
Tu pourrais egalement m'indiquer s'il est fonctionnel avec Visual C++ (, enfin sous windows).

J'attends ...
0
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
0
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 !!!
0

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
0
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
0
toony Messages postés 25 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 15 novembre 2004 1
9 sept. 2003 à 13:07
Il est tout a fait possible de développer un client/serveur en C & socket sans fork...
Je vais voir si je retrouve mon code et je vous l'envoie.

Tony
-1