Utilisation basique de winsock

Résolu
Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 - 5 nov. 2004 à 13:12
Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 - 6 nov. 2004 à 15:50
bonjour à tous
j'essaie d'apprendre winsock en vc++ mode console pour le moment, et j'ai qlq difficultés...

en gros j'etabli bien une connection entre le serveru et le client , mais lorsque le serveur envoie une chaine de char, seul les 4 premiers char passent... et j vois pas pkoi....

j'ai deja pas mal cherché sur les forum etc pour comprendre comment out cela marchait; mais là je suis un peu perdu...

ps: pardon pour l'indentation les tests et les commentaires, mais j suis pas chez moi et c'est pas mais version originale du code

je remercie d'avance tous ceux qui mpourraient me donner un ptit coup de main

voila le code:

//
// serveur
//

#include "stdafx.h"
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")

int main(int argc, char* argv[])
{

printf("Serveur\n");

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(6667);
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);
while(1)
{
int sinsize = sizeof(csin);
if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
{
printf("connection acceptee\n");
char *buff = new char[25];
buff = "LLLLL world!\r\n\0";
send(csock, buff, sizeof(buff), 0);
printf ("chaine send : %s\n",buff);
}
}

return 0;
}

//
// Client
//

#include "stdafx.h"
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")

void main(int argc, char* argv[])
{

printf("Client\n");

WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;
char *buffer = new char[25];
/* Tout est configuré pour se connecter sur IRC, haarlem, Undernet. */
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family = AF_INET;
sin.sin_port = htons(6667);
connect(sock, (SOCKADDR *)&sin, sizeof(sin));
recv(sock, buffer, sizeof(buffer), 0);

printf("buff = %s\n",buffer);

closesocket(sock);
WSACleanup();

//return 0;
}

3 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
5 nov. 2004 à 13:40
Salut,
C'est normal car sizeof(buffer) est toujours égale à 4. buffer étant un pointeur donc sa taille est toujours 4. Tu dois revoir la déclaration de ton tableau. Pas besoin d'allocation dynamique. Tu peux le déclarer comme ceci:
char buffer[25];
et tout rentrera dans l'ordre. A corriger dans le code serveur et client.
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
5 nov. 2004 à 13:59
J'ai oublié de préciser qu'il faudra correctement initialiser le buffer dans le code serveur:
char buffer[25];
strcpy(buffer,"LLLLL world!\r\n\0");
3
Spiffou Messages postés 100 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 9 juin 2014 1
6 nov. 2004 à 15:50
merci beaucoup pour ta reponse...
l'erreur avait rien a voir avce le reseau mais j'etait focalisé sur les socket...
^^

comme quoi : vigilance constante....

lol
0
Rejoignez-nous