Witam forumowiczów,
od kilku dni zmagam się (pewnie jak się okaże - banalnym) problemem z biblioteką winsock2.h.
Otóż serwer ciągle zwraca błąd, mimo poprawnego połączenia się i nie wyświetla mojej wiadomości. Co więcej, przy sztucznym wywołaniu błędu w kodzie serwera okazało się, że ten ciągle "słucha" i wywala ten błąd gdy otrzymuje wiadomość (oczywiście kod podaję bez improwizowanego błędu).
Oto moje wypociny. Proszę nie zwracać uwagi na gdzieniegdzie brak kontroli błędów i ogólny bałagan w kodzie. Napisałem tylko, żeby zobaczyć, czy to w ogóle działa.
//Server
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <Winsock2.h>
#include <iostream>
#define DEFAULT_PORT 12018
#define HIDE_CONSOLE_WINDOW true
int main()
{
int iResult;
//Winsock Startup
WSAData wsaData;
WORD DllVersion = MAKEWORD(2, 1);
if (WSAStartup(DllVersion, &wsaData) != 0)
{
MessageBoxA(NULL, "Winsock startup failed!", "ERROR", MB_OK | MB_ICONERROR);
exit(1);
}
SOCKADDR_IN addr;
int addrlen = sizeof(addr);
addr.sin_addr.s_addr = inet_addr("192.168.100.2");
addr.sin_port = htons(DEFAULT_PORT);
addr.sin_family = AF_INET;
memset( &( addr.sin_zero ), '\0', 8 );
SOCKET sListen = socket(AF_INET, SOCK_STREAM, NULL);
bind(sListen, (SOCKADDR*)&addr, sizeof(addr));
listen(sListen, SOMAXCONN);
SOCKET newConnection;
newConnection = accept(sListen, (SOCKADDR*)&addr, &addrlen);
if (newConnection == 0)
{
std::cout << "Failed to accept the client's connection" << std::endl;
}
char recBuf[256] = "";
do
{
iResult = recv(sListen, (char*)recBuf, sizeof(recBuf), NULL);
Sleep(100);
std::cout<<recBuf<<std::endl;
/* if (iResult > 0)
{
std::cout<<"Bytes received: "<< iResult<<std::endl;
break;
}
else if (iResult == 0)
std::cout<<"Connection closed "<< iResult<<std::endl;
// else
// std::cout<<"recv failed "<< iResult<<std::endl;
*/
}
while (iResult==-1);
system("pause");
return 0;
}