Rechercher : dans
Par :

Socket C

Dernière réponse le 26 nov 2003 à 09:25:07 senynium, le 4 sep 2003 à 18:09:48 
 Signaler ce message aux modérateurs

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 !!!!!!!!!!

Meilleures réponses pour « Socket C » dans :
Enlever ventirad socket A VoirProblème Je n'arrive pas à enlever le ventirad de mon processeur socket A. Solution Il y a un crochet sur un côté. Il faut appuyer avec le bout d'un tournevis plat, par exemple, sur le crochet pour le libérer. Merci à epango sur le forum...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ? VoirDepuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appelé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les logos...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Les fonctions de l'API Socket VoirLes fonctions des sockets en détail La fonction socket() La création d'un socket se fait grâce à la fonction socket() : int socket(famille,type,protocole) famille représente la famille de protocole utilisé (AF_INET pour TCP/IP utilisant une...
Programmation réseau - Les sockets VoirIntroduction aux sockets La notion de sockets a été introduite dans les distributions de Berkeley (un fameux système de type UNIX, dont beaucoup de distributions actuelles utilisent des morceaux de code), c'est la raison pour laquelle on parle...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...

1

mirza, le 4 sep 2003 à 18:34:19

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);
}



}

Répondre à mirza

2

senynium, le 4 sep 2003 à 19:31:27

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

Répondre à senynium

3

mirza, le 5 sep 2003 à 08:40:11

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)

Répondre à mirza

4

senynium, le 8 sep 2003 à 13:46:58

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 .

Répondre à senynium

5

mirza, le 8 sep 2003 à 17:00:43

Fork c'est en UNIX

en VC++ je crois que c'est CreateThread et les fonctions apparentées qu'il faut utiliser .

Répondre à mirza

6

toony, le 9 sep 2003 à 13:07:25

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

Répondre à toony

7

senynium, le 10 sep 2003 à 13:50:56

Ce serait vraiment sympa
Tu pourrais egalement m'indiquer s'il est fonctionnel avec Visual C++ (, enfin sous windows).

J'attends ...

Répondre à senynium

8

chris, le 10 sep 2003 à 14:43:39

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

Répondre à chris

9

senynium, le 24 sep 2003 à 10:50:07

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 !!!

Répondre à senynium

10

ghaladon, le 25 nov 2003 à 11:35:08

Salut

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

merci d'avance

Répondre à ghaladon

11

 Senynium, le 26 nov 2003 à 09:25:07

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

Répondre à Senynium
Collection CommentÇaMarche.net