(win)Socket-Probleme
-
Moin,
ich fange gerade an mich mit Netzwerkfunktionen auseinander zu setzen und wollte erstmal nen kleines Testprogramm schreiben, welches einfachen Daten verschicken kann. Es ist leider bis jetzt erst hablfertig, aber trotzdem hier mal der Code:
#include <winsock.h> #include <iostream.h> void WSAInit(void) { WORD wVersionReg = MAKEWORD(1, 1); WSADATA wsaData; if (int err = WSAStartup(wVersionReg, &wsaData) != 0) { cout <<"Fehler: Initialisieren - WinSock.dll!"; } } void main() { int schluss; cout << "TCP-IP-TEST-PROGRAMM\nVersion1.0\n\n"; //Winsocket initialisieren WSAInit(); cout << "WINSOCKET initialisiert\n"; //Datenelement für IP und Port erstellen struct sockaddr_in AdrClient; AdrClient.sin_family = AF_INET; // Wie wird connected (standart) AdrClient.sin_addr.s_addr = inet_addr("127.0.0.1"); // Was wird connected AdrClient.sin_port = 5002; // Über welchen Port cout << "Client-Daten gesetzt\n"; //Sockets erstellen int client; //Sockets mit Daten füttern if ((client = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) //Typ der Verbindung/Socket festlegen cout << "Fehler beim Erstellen des Client-Socket!\n"; else cout << "Client-Socket initialisiert\n"; //Client-Socket connecten if ( connect (client, (struct sockaddr *) &AdrClient, sizeof(AdrClient)) == SOCKET_ERROR) cout << "Fehler beim Connecten mit Server!\n"; else cout << "Client mit Server connected\n"; closesocket(client); cout << "Sockets geschlossen!\n"; cin >> schluss; }Nun möchte ich auf nen Server connecten.
Deswegen geb ich ja einen bestimmt Port an (in AdrClient.sin_port).
Problem ist, dass die connect() nur sockaddr * annimmt, aber kein sockaddr_in, den ich benutze um den Port zu übermitteln.
Jetzt beim Umwandeln fallen natürlich sin_port und Co. weg, sodass ein willkürlicher Port genommen wird.In den Tutorials die ich habe klappt es mal mit und mal ohne Umwandlung, bei mir geht beides nicht.
Jemand ne Idee was ich falsch mache??
Dank im Voraus!
Gruß
chackie-lee
-
Ok, hab den Fehler schon selber gefunden!
Es fehlt das htons(port) bei AdrClient.sin_port = 5002;
Also:AdrClient.sin_port = htons(5002);Gruß
chackie-lee
-
chackie-lee schrieb:
htons
host-to-network-short
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.