Posez votre question Signaler

Socket C

senynium - Dernière réponse le 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 !!!!!!!!!!
Lire la suite 

Socket C »

11 réponses
Réponse
+1
moins plus
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 .
mirza - 8 sep 2003 à 17:00
fork c'est en UNIX

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



}
senynium - 4 sep 2003 à 19:31
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
mirza - 5 sep 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)
Ajouter un commentaire
Réponse
+0
moins plus
Ce serait vraiment sympa
Tu pourrais egalement m'indiquer s'il est fonctionnel avec Visual C++ (, enfin sous windows).

J'attends ...
chris - 10 sep 2003 à 14:43
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
Ajouter un commentaire
Réponse
+0
moins plus
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 !!!
Ajouter un commentaire
Réponse
+0
moins plus
salut

je cherche un code de client/serveur pour windows pourrais tu me doner des pistes sur ton programme?

merci d'avance
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
-1
moins plus
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
Ajouter un commentaire
Ce document intitulé « Socket C » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook