C++ Socket fehlermeldung vom Compiler



  • Guten Abend liebe Community,

    Ich beginne gerade mit der Socketprogrammierung, aber naja mein Compiler halt...
    Weiß jemand wie ich diese Fehler beheben kann?
    Ich meine er würde die Header nicht finden 😕

    // Netzwerkprogrammierung, WINSOCK API, Sockets
    // TCP Server
    
    #pragma comment(lib, "ws2_32.lib")
    #include <cstdio>
    #include <iostream>
    #include <WinSock2.h>
    #include <Windows.h>
    using namespace std;
    
    char recvbuf[256];
    
    int main()
    {
    	// Hilfsvariable
    	long res;
    
    	// Versionsdaten
    	WSADATA wsaData;
    
    	// ws2_32.dll aktivieren
    	res = WSAStartup(MAKEWORD(2, 1), &wsaData);
    	if(res == 0 )
    		cout << "WSAStartup()\t\t successful" << endl;
    	else
    		cout << "error WSAStartup(): " << WSAGetLastError() << endl;
    
    	// Socket Deskriptoren
    	SOCKET slisten, client;
    
    	// Socket anforder bzw. Kommunikationsendpunkt einrichten
    	slisten = socket(AF_INET, SOCK_STREAM, 0);
    	if(slisten != INVALID_SOCKET )
    		cout << "socket()  \t\t successful" << endl;
    	else
    		cout << "error socket(): " << WSAGetLastError() << endl;
    
    	// Verbindungsinformationen
    	sockaddr_in info;		// sockaddr
    	info.sin_addr.s_addr = inet_addr("127.0.0.1");
    	info.sin_family		 = AF_INET;
    	info.sin_port		 = htons(54345);
    	int infolen = sizeof(info);
    
    	res = bind(slisten, (struct sockaddr*)&info, infolen);
    	if(res != SOCKET_ERROR )
    		cout << "bind()  \t\t successful" << endl;
    	else
    		cout << "error bind(): " << WSAGetLastError() << endl;
    
    	// Warteschlange für einkommende Verbindungen
    	res = listen(slisten, SOMAXCONN);
    	if(res != SOCKET_ERROR )
    		cout << "listen()  \t\t successful" << endl;
    	else
    		cout << "error listen(): " << WSAGetLastError() << endl;
    
    	sockaddr_in clientinfo;
    	int clientinfolen = sizeof(clientinfo);
    
    	while(1)
    	{
    		// Verbindung aus der Warteschlange abholen
    		client = accept(slisten, (struct sockaddr*)&clientinfo, &clientinfolen);
    		if(client != SOCKET_ERROR)
    			cout << "client accepted: " << inet_ntoa(clientinfo.sin_addr) << ":"
    			     << ntohs(clientinfo.sin_port) << endl;
    
    		// über das Socket kommunizieren
    		res = send(client, "server message received", strlen("server message received"), 0);
    		if(res == SOCKET_ERROR)
    			cout << "error send()" << WSAGetLastError() << endl;
    
    		res = recv(client, recvbuf, 256, 0);
    		if(res == SOCKET_ERROR)
    			cout << "error recv(): " << WSAGetLastError() << endl;
    		else
    			cout << res << " bytes received: " 
    				 << recvbuf << endl;
    	}
    
    	closesocket(client);
    	closesocket(slisten);
    	WSACleanup();
    	return 0;
    }
    

    Fehlermeldungen:

    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x26): undefined reference to `__imp_WSAStartup'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x62): undefined reference to `__imp_WSAGetLastError'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0xa9): undefined reference to `__imp_socket'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0xe7): undefined reference to `__imp_WSAGetLastError'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x125): undefined reference to `__imp_inet_addr'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x142): undefined reference to `__imp_htons'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x176): undefined reference to `__imp_bind'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x1b2): undefined reference to `__imp_WSAGetLastError'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x1f8): undefined reference to `__imp_listen'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x234): undefined reference to `__imp_WSAGetLastError'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x291): undefined reference to `__imp_accept'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x2b7): undefined reference to `__imp_ntohs'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x2cb): undefined reference to `__imp_inet_ntoa'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x33a): undefined reference to `__imp_send'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x352): undefined reference to `__imp_WSAGetLastError'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x3a6): undefined reference to `__imp_recv'
    C:\Users\\AppData\Local\Temp\ccu7n369.o	winsock_server.cpp:(.text+0x3be): undefined reference to `__imp_WSAGetLastError'
    c:\program files (x86)\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe	C:\Users\\AppData\Local\Temp\ccu7n369.o: bad reloc address 0x10 in section `.xdata'
    C:\Users\\Desktop\collect2.exe	[Error] ld returned 1 exit status
    


  • Ws2_32.lib dazu linken.



  • Dieser Thread wurde von Moderator/in Arcoth aus dem Forum C++ (alle ISO-Standards) in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hmm, vielleicht wäre das besser im WinAPI Board aufgehoben...



  • Arcoth schrieb:

    Hmm, vielleicht wäre das besser im WinAPI Board aufgehoben...

    Ist schon ein Compilerproblem: mingw versteht pragma comment nicht => lib zu Fuß binden.



  • Könnt ihr mir einen anderen Compiler empfehlen ?
    Ich hab schon mit der asio Bibiothek von boost die geht auch nich 😕
    Hab sie mir jetzt runtergeladen wir kann ich sie jetzt da einbinden?



  • VS2015



  • Mit den Programmen von Microsoft hab ich immer Probleme ...
    Kann z.B nicht diese Klammer setzen "}" die andere geht, und vieles mehr -.-
    Außerdem komm ich damit nicht sogut klar, ich mag den weißen Hintergrund nicht.
    Kann schlecht den Code lesen, brauch nen schwarzen Hintergrund xD!



  • Wusste gar nicht, dass es auf Linux auch winsock und C: gibt ...



  • MagDenNamenNich schrieb:

    Mit den Programmen von Microsoft hab ich immer Probleme ...
    Kann z.B nicht diese Klammer setzen "}" die andere geht, und vieles mehr -.-
    Außerdem komm ich damit nicht sogut klar, ich mag den weißen Hintergrund nicht.
    Kann schlecht den Code lesen, brauch nen schwarzen Hintergrund xD!

    Das mit der Klammer musst du mal genauer erklären. Das wäre ja wohl schon jemandem aufgefallen wenn man in einer Entwicklungsumgebung keine geschweiften Klammern schreiben kann. Seit Visual Studio 2012 (oder spätestens mit 2013) gibts ein Dark Theme. Da haste deinen dunklen Hintergrund. Es gibt sogar eine kostenlose Version für Privatpersonen: https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx



  • Selbst bei VS 2005 kann man schon die Farben ändern:
    Tools - Options - Environment - Fonts and Colors

    Weiß jetzt leider nicht wie die Menüs in der deutschen Version heißen.



  • Jetzt kein spaß ich kann diese Klammer einfach nicht setzen!

    Auf meinem altem Lapi ging es auch nicht, und jetzt auf dem neuen Pc ebenfalls 😕
    Was geht da eigentlich ab...


Anmelden zum Antworten