Socket Programmierung

Maxii

Mitglied
Hallo zusammen!

Ich habe folgendes Problem:

Ich soll mit C++ ein kleines Programm zur Kommunikation vie Sockets schreiben. Mit perl war es nicht schwer. Mit C++ leider schon. Wieso kommt bei mir der Text vom Client beim Server nicht an? Sprich die Verbindung wird hergestellt, nur ankommen tut nichts.

Client:
Code:
// Clzwo.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include <winsock.h>
#include <string>
#include <iostream>
using namespace std;


int main(int argc, _TCHAR* argv[])
{
	SOCKET sock;
	WSADATA wsaData;
	sockaddr_in addr;
	char msg[100] = "Hallo Server!\n";
	if(WSAStartup(MAKEWORD(2,0), &wsaData) != 0)
		std::cout<<"WSA konnte nicht initialisiert werden.";	

	addr.sin_port = 4444;
	addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = inet_addr("192.168.120.163");

	sock = socket(AF_INET, SOCK_STREAM, 0);
	if(sock == 0)
		std::cout<<"Socket konnte nicht initialisiert werden";

	if(connect(sock, (sockaddr *) &addr, sizeof(addr)) == -1)
		std::cout<<"Verbindung konnte nicht hergestellt werden";
	
	send(sock,msg,sizeof(msg),0);
	closesocket(sock);
	WSACleanup();
	return 0;
}

Server:
Code:
// Clzwo.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include <winsock.h>
#include <string>
#include <iostream>
using namespace std;


int main(int argc, _TCHAR* argv[])
{
	SOCKET sock;
	WSADATA wsaData;
	sockaddr_in addr;
	int i=0;
	char BUF[100]="\n";
	if(WSAStartup(MAKEWORD(2,0), &wsaData) != 0)
		std::cout<<"WSA konnte nicht initialisiert werden.";	

	addr.sin_port = 4444;
	addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = INADDR_ANY;
	int cli_size;
	cli_size = sizeof(addr);

	sock = socket(AF_INET, SOCK_STREAM, 0);

	bind(sock,(sockaddr *) &addr, cli_size);


	if(sock == 0)
		std::cout<<"Socket konnte nicht initialisiert werden";

	while(i<100000)
	{
		cout << i << endl;
		if(listen(sock, 3) == -1)
		{
//			cerr << "Error, listen" << endl;
		}
		else
		{
			accept(sock,(sockaddr *) &addr, &cli_size );
			recv(sock,BUF,sizeof(BUF),0);
			cout << "Empfangen: "<< BUF <<endl;
		}
		i++;
		Sleep(100);
	}
	closesocket(sock);
	WSACleanup();
	return 0;
}
 
Also so sieht das alles erstmal richtig aus.

Ich würde nach dem Senden mal ein Sleep(2000) einbauen.
Kann ja sein das der Socket schon vor dem Senden wieder geschlossen wird.

Edit:
Fehler gefunden.
Folgendes
Code:
accept(sock,(sockaddr *) &addr, &cli_size );
recv(sock,BUF,sizeof(BUF),0);
muss so aussehen:
Code:
Socket ClientSock = accept(sock,(sockaddr *) &addr, &cli_size );
recv(ClientSock ,BUF,sizeof(BUF),0);

MFG Anfänger
 
Zuletzt bearbeitet:
Zurück