recv() Funktion
-
Hi,
ich hab ein Problem mit recv()...
Und zwar bekomm ich nix zurück. Vielleicht sieht jemand von euch den Fehler:
Beim Fenster erstellen:
WSAStartup(MAKEWORD(2,0),&wsa); s = socket(PF_INET,SOCK_STREAM,0); //*** fill srv ***// //empty srv memset(&srv, 0, sizeof(srv)); //check if ipaddress is a address or dns string if (inet_addr(IPAddress) == INADDR_NONE) { dnsip = gethostbyname(IPAddress); if (dnsip) memcpy(&srv.sin_addr, dnsip->h_addr_list[0], sizeof(dnsip)); else return 0; } else { srv.sin_addr.s_addr = inet_addr(IPAddress); } srv.sin_port = htons(iPort); srv.sin_family = AF_INET; closesocket(s); WSACleanup();Beim connect:
int iError_connect; int iError_send; int recvbytes = 1; int iError_recive = 0; char recvbuf[64]; //*** create socket ***// WSAStartup(MAKEWORD(2,0),&wsa); s = socket(PF_INET,SOCK_STREAM,0); //*** set timeout 1 sec ***// int lenght = 1; setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(const char*)&lenght,sizeof(lenght)); //*** connect to server ***// iError_connect = connect(s,(struct sockaddr*) &srv, sizeof(srv)); //*** send request ***// iError_send = send (s, cRequest, strlen(cRequest), 0); //*** get recive ***// do { recvbytes = recv(s, recvbuf, sizeof(recvbuf), 0); if (recvbytes > 0) iError_recive++; } while(recvbytes > 0); closesocket(s); WSACleanup();iPort ist 8080
IPAddress ist 10.101.1.223
cRequest ist GET http://10.101.1.223/index.html HTTP/1.0\nHost: 10.101.1.223\n\n
-
oh man... ok hab den Fehler

bei:
if (inet_addr(IPAddress) == INADDR_NONE) { dnsip = gethostbyname(IPAddress); if (dnsip) memcpy(&srv.sin_addr, dnsip->h_addr_list[0], sizeof(dnsip)); else return 0; } else { srv.sin_addr.s_addr = inet_addr(IPAddress); }da war das mit der Namensauflösung falsch!
Nicht:
memcpy(&srv.sin_addr, dnsip->h_addr_list[0], sizeof(dnsip));
sondern:
memcpy( (char *)&srv.sin_addr, dnsip->h_addr, dnsip->h_length);Jetzt funkt das auch!!!
