Newsgroup: it.comp.programmare.win32
Titolo: Problema con il client winsock

Ecco parte del client:
struct sockaddr_in sin;
WSADATA wsaData;
SOCKET client;
WORD version;
int error;
char Data[] = "Pacchetto correttamente ricevuto.";
int main()
...
...
memset(&sin,0,sizeof sin);
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_port = htons(2000);
if (bind(client,&sin,sizeof sin) == SOCKET_ERROR) {
 printf("Errore nel binding\n");
 return FALSE;
}
if (connect(client,&sin,sizeof sin)==SOCKET_ERROR) {
    printf("Errore nella connessione\n");
 return FALSE;
}
if (send(client,Data,33,0)==SOCKET_ERROR){
 printf("Trasmissione dati fallita\n");
 return FALSE;
}
closesocket(client);
WSACleanup();
Il problema è che non va a buon fine la connessione . Il log di netstat
mentre tenta la connessione è il seguente:
TCP   
0.0.0.0:2000
 
0.0.0.0:0
              LISTENING       //
questo
//   è il server
TCP   
127.0.0.1:2000
 
0.0.0.0:0
              LISTENING
TCP   
127.0.0.1:2000
 
127.0.0.1:2000
       SYN_RECEIVED
E gli ultimi due cosa sono ? Uno dovrebbe essere il client. E lo stato
SYN_RECEIVED che significa. ( Gli ultimi due non sono presenti quando è
attivo solo il server
Vi metto anche il codice sorgente del server:
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
struct sockaddr_in sin;
WSADATA wsaData;
WORD version;
int error;
int lenght;
SOCKET server;
SOCKET client;
char rcvData[100];
int i;
int main()
{
    printf ("Inizializzazione dell'interfaccia WOSA...");
 version= MAKEWORD(2,0);
 error = WSAStartup(version,&wsaData);
 if (error!=0) {
  return FALSE;
 }
 if (LOBYTE(wsaData.wVersion) !=2 ||
  HIBYTE(wsaData.wVersion) !=0) {
  WSACleanup();
  printf("errore\n");
  return FALSE;
 }
     printf ("fatto\n");
 server = socket(AF_INET,SOCK_STREAM,0);
 printf ("Instanziazione del socket................completato\n");
 memset(&sin,0,sizeof sin);
 sin.sin_family = AF_INET;
 sin.sin_addr.s_addr = INADDR_ANY;
 sin.sin_port = htons( 2000 );
 printf("Struttura sockaddr_in....................riempita\n");
 if ( bind(server,&sin,sizeof sin) == SOCKET_ERROR) {
  return FALSE;
 }
 printf ("socket-binding...........................completato\n");
 printf( "\nSocket server in ascolto.... \n");
 while(listen(server,SOMAXCONN) == SOCKET_ERROR);
 lenght = sizeof sin;
 client = accept(server,&sin,&lenght);
   if (recv(client,rcvData,100,0)==SOCKET_ERROR){    // sta bene
// qui questa
// funzione ?
  printf("Errore di ricezione delle informazioni. Dato perso !!\n");
  return FALSE;
 }
 for(i=0; i<100;i++){
  printf(rcvData[i]);
 }
 printf("\n");
closesocket(server);
WSACleanup();
 return 0;
}
Grazie Ciao

Taglio tuoo il sorgente.
Mi sembra che sul server tu non faccia accept()
Server:
WSAStartup();
Sock=socket();
//Fill sockaddr
bind();
listen();
NewSock=accept(Sock); //<<------------------ MISSING
send(NewSock)/revc(NewSock);
Client:
WSaStartup();
// find IP from name: gethostbyname();
Socket=socket();
bind();
connect();
recv()/send();
Sent via Deja.com 
http://www.deja.com/
Share what you know. Learn what you don't.


No, lo faccio e come.
Forse non l'hai notato , ricontrolla.
Cerca questa stringa.
client = accept(server,&sin,&lenght);

 SYN_RECEIVED che significa. ( Gli ultimi due non sono presenti quando č
