winsock2 - problem z inicjalizacją

winsock2 - problem z inicjalizacją
R3
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 13 lat
  • Postów:50
0

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

Kopiuj
	
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

BL
  • Rejestracja:ponad 16 lat
  • Ostatnio:5 miesięcy
0
Kopiuj
 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


Zapraszam osoby początkujące na indywidualne szkolenia z programowania w JAVA. Dla najlepszych, po zakończonym kursie, praca ze stawką początkową 10-12tyś netto. Kurs trwa od 6 do 24 miesięcy, 1-2h w tygodniu, 150PLN/h. szkolenia kropka java malpaa gmail kropka com
edytowany 1x, ostatnio: Blood
CY
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 4 lata
  • Postów:27
0
Kopiuj
 #include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")

dodane ?

R3
  • Rejestracja:ponad 16 lat
  • Ostatnio:prawie 13 lat
  • Postów:50
0

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

Kopiuj
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.

several
  • Rejestracja:prawie 16 lat
  • Ostatnio:około 2 godziny
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ą.


Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około godziny
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.

edytowany 2x, ostatnio: Azarien
quetzalcoatl
o tyy niedobry.. nabijasz sie z sysdir\system32\drivers\etc* ? :)))))
PR
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 13 lat
  • Postów:157
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

edytowany 1x, ostatnio: protechnologia

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.