winsock2 - problem z inicjalizacją

0

Postanowiłem pobawić się z WinSock, no i mam problem już na starcie...

	
WSADATA wsadata;
if (!WSAStartup(MAKEWORD(2, 0), &wsadata))
{
	std::cout << "\n>> WSAStartup critical error: " << WSAGetLastError();
	_getch();
	WSACleanup();
	return(1); 
}
	
WSACleanup();
_getch();
return(0); 

Kod kompiluje się, ale po uruchomieniu wywala błąd

WSAStartup critical error: 0

Szczerze powiedziawszy nie wiem o co mu chodzi, pamiętam że kiedyś już coś pisałem z tą biblioteką i tego problemu nie było. Może ktoś pomóc?

PS. Programuje pod Visual C++ Studio 2008 EE

0
 WSADATA WsaDat;
if(WSAStartup(MAKEWORD(2,0),&WsaDat) != 0)
        cout << "Nie mozna utworzyc WSA!\n";
	if ( LOBYTE( WsaDat.wVersion ) != 2 || HIBYTE( WsaDat.wVersion ) != 0 )
	{
		cout << "error zła wersja winsocket\n";
		WSACleanup();
	}

    SOCKET Klient;
    
    Klient = socket(AF_INET, SOCK_STREAM, 0);
    if(Klient == INVALID_SOCKET)
              cout << "Nie mozna utworzyc socketa!\n";

To działa na 100%, bo wyciąłem z mojego projektu :D

0
 #include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")

dodane ?

0

już działa, kluczowy dla działania wydaje się być ten fragment:

if (WSAStartup(MAKEWORD(2, 0), &wsadata) != 0)

Dzięki wielkie :)

btw, opłaca bawić się z WinSock? Pytam bo znalazłem bibliotekę SDLNet i wydaje mi się bardziej przejrzysta niż WinSock, no i multiplatformowa jest.

0

Warto poznać winsock (nie winsock2), interfejs socketów jest baaardzo podobny między linuksem a windowsem (jeśli używa się winsock), jedyną taką bardzo namacalną różnicą jest inne inkludowanie. Interfejs socketowy jest niskopoziomowy, trzeba implementować protokoły osobno, dlatego szybciej efekty uzyskasz z jakąś biblioteką sieciową.

0

Nie wiem jak poważne są różnice między winsock a winsock2, raczej nieduże, ale design tych bibliotek i wygoda użycia są TRAGICZNE.
Problem w tym, że to funkcje systemowe (a więc część WinAPI pod Windowsem) i wszystko inne jak to SDLNet to tylko nakładki, wewnętrznie i tak odnoszące się do socketów.

interfejs socketów jest baaardzo podobny między linuksem a windowsem
to dlatego że windowsowa obsługa sieci jest żywcem wzięta z BSD. Nawet Windows 7 wciąż zawiera część kodu źródłowego BSD.

0
robin3d napisał(a)

Postanowiłem pobawić się z WinSock, no i mam problem już na starcie...
Kod kompiluje się, ale po uruchomieniu wywala błąd

WSAStartup critical error: 0

Wystarczy tylko jednym okiem spojrzec do dokumentacji, a tam jak byk:
"If successful, the WSAStartup function returns zero. Otherwise, it returns..."


Opolski Portal Programistyczny
http://programowanie.opole.pl
http://protechnologia.pl

1 użytkowników online, w tym zalogowanych: 0, gości: 1