Socket pb avec send

edpunisher Messages postés 13 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 6 avril 2006 - 27 juin 2005 à 20:46
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 - 28 juin 2005 à 10:14
kikoo voici mon code client et server mais bon dieu pourkoi je recois pas le fameux hello world

NB:y as pas d erreur de connexion

le server est sur unix et le client sous windows

aidez moi pleaaaaaaaaaaaaase

"""""""""""""""""""""server""""""""""""""""""""""""""void main()

{

struct sockaddr_in soc_in;

int val,len,f;

int ss;



ss=socket(AF_INET,SOCK_STREAM,0);

val=1;

setsockopt(ss,SOL_SOCKET,SO_REUSEADDR,&val,sizeof(val));

soc_in.sin_family=AF_INET;

soc_in.sin_addr.s_addr=INADDR_ANY;

soc_in.sin_port=htons(32165);

bind(ss,((struct sockaddr *)&soc_in),sizeof(soc_in));

listen(ss,5);

len=sizeof(soc_in);

f=accept(ss,(struct sockaddr *)&soc_in,&len);

if(f==-1)

{perror("erreur");}

else

{printf("very good");}

send(ss,"Hello world!\r\n", 14,0);

close(ss);

}









"""""""""""""""""""""""""client""""""""""""""""""""""""""""""

#include<winsock.h>

#include<stdio.h>

#pragma comment(lib, "ws2_32.lib")



void main()

{

WSADATA WSAData;

WSAStartup(MAKEWORD(2,0), &WSAData);



char* buffer=new char[20];

buffer="";

SOCKET sc;

int y;

struct hostent *sp;

struct sockaddr_in sins;

sp=gethostbyname("debian");

sc=socket(AF_INET,SOCK_STREAM,0);

if(sc==-1){perror("socket failed");exit(1);}

sins.sin_family=AF_INET;

sins.sin_addr.s_addr = inet_addr("192.168.1.1");

// memcpy(&sins.sin_addr,sp->h_addr_list[0],sp->h_length);

sins.sin_port=htons(32165);

y=connect(sc,(sockaddr *)&sins,sizeof(sins));

if(y==-1)

{perror("socket failed");exit(1);}

else{printf("very good");}

recv(sc,buffer,sizeof(buffer),0);

printf("kjh");

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

WSACleanup();



}

6 réponses

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
27 juin 2005 à 21:46
salut,

ton serveur envoie le hello world au mauvais socket ...

essaie ca :

send(f,"Hello world!\r\n", 14,0);



toi tu l'envoyais au socket ss ...





a+
0
edpunisher Messages postés 13 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 6 avril 2006
27 juin 2005 à 23:33
c'etai trop evident pour que je ne la remarque pas
merci bcp je te revauderai ca
0
edpunisher Messages postés 13 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 6 avril 2006
27 juin 2005 à 23:40
un autre prob
je recois hello world²²²²
d ou ils viennet les ²²²² ????
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
28 juin 2005 à 00:03
remplace ton recv comme suit:



int r = recv(sc,buffer,sizeof(buffer) - 1,0);

if (r > 0)

buffer[r] = 0;

else

// il y a eu une erreur...



en fait, tu recois les donnees brutes (sans le zero de fin de
chaine), ce qui explique que printf te rajoute des caracteres
aleatoires.



a+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
edpunisher Messages postés 13 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 6 avril 2006
28 juin 2005 à 00:08
bravo a toi
t es mon samaritain
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
28 juin 2005 à 10:14
ha je retire ce que j'ai dit, pour que ca marche ton buffer doit etre alloué comme suit:

char buffer[20];

et non pas comme tu as fait :

char* buffer=new char[20];



sinon sizeof(buffer) vaut sizeof(char*) c'est à dire 4.
0
Rejoignez-nous