Socket unter C++ hört am falschen Port ab

eeemoh

Mitglied
Hi Leute,

ich habe mich mit Sockets bisher nur unter .NET auseinander gesetzt und bin nun unter C/C++ mit dem Thema etwas auf die Nase gefallen. Ich will einen Server (wofür ist jetzt erstmal unerheblich) unter C++ aufsetzen und mich mit einem Client, der in C# geschrieben ist, verbinden. Was ich mache ist in etwa folgendes (ich hab zur besseren Lesbarkeit die Fehlerabfragen herausgenommen, sind aber eigentlich bei jedem Funktionsaufruf drin.

Code:
	WSADATA wsa;
	WSAStartup(MAKEWORD(1, 1), &wsa);

	SOCKET sock = socket(PF_INET, SOCK_STREAM, 0);

	sockaddr_in sa;
	sa.sin_family = AF_INET;
	sa.sin_port = 16000;
	sa.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	
	bind(sock, (struct sockaddr*)&sa, sizeof(sa));

	listen(sock, 3);

	while(running)
	{
		SOCKET client;

		cout << "Warte auf Verbindung" << endl;

		client=accept(sock, NULL, 0) ;

		cout << "Connection accepted!" << endl;
	}

Das Prog lässt sich kompilieren und auch ausführen, es hört aber nicht auf Port 16000, sondern auf 32830 ab (netstat ist dein Freund). Darunter kann ich mich dann auch mit meinem C#-Prog verbinden. Nun würde ich gerne wissen, wo der Fehler liegt, da ich ja gerne auf dem Port 16000 (oder was ich eben einstelle) abhören möchte und das durch die Zeilen

Code:
	sa.sin_port = 16000;
		
	bind(sock, (struct sockaddr*)&sa, sizeof(sa));

doch eigentlich eingestellt werden sollte.

Vielen Dank schon für eure Hilfe, Paul
 
Hallo,

man muss den Port und die Adresse (dies wird allerdings bei dir schon mit der Funktion inet_addr erledigt) in Network Byte Order angeben. Da dein Rechner höchstwahrsch ein x86 ist werden deine Daten im Little Endian Format gespeichert, Network-Byte-Order ist aber Big Endian bei IP.

Schau dir mal die Funktionen htons, htonl an:
http://msdn.microsoft.com/en-us/library/ms738557.aspx

Gruß,
RedWing
 
Hey,

vielen Dank, werd ich gleich mal ausprobieren :)

Paul

EDIT: Läuft, vielen Dank...
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück