Socket server und client, komiche text ausgabe



  • MoinMoin,
    ich habe einen Socket server und client geschrieben(Mein erster versuch)
    als ich sie getestet habe habe ich gesehen das der Server komiche texte ausgibt

    ===================================
    =========  Start Server
    ===================================
    Server ist listening
    client from xxx.xxx.xxx.xxx connected
    
    Message: ┬ܲv▼→▲$■   &p♥wLl♥w°
    

    Hier die Quell codes

    Server

    #include "include.h"
    #include "Funktionen.h"
    
    namespace ChatLoad
    {
    	void Chat::Server()
    	{
    		cout << "===================================" << endl
    			 << "=========  Start Server" << endl;
    		WSAData		wsa;
    		if(WSAStartup(MAKEWORD(2,1),&wsa))
    		{
    			 printf("WSAStartup() failed, %lu\n", (unsigned long)GetLastError());
    		}
    
    		int				c,addr_len;
    		SOCKET			sServer;
    		SOCKADDR_IN		addr;
    
    		addr.sin_addr.s_addr	= INADDR_ANY;
    		addr.sin_port			= htons(5213);
    		addr.sin_family			= AF_INET;
    
    		sServer = socket(AF_INET,SOCK_STREAM,0);
    
    		if(bind(sServer,(SOCKADDR*)&addr,sizeof(addr)) == -1)
    		{perror("=========  Bind() Failed");}
    
    		if(listen(sServer,3) == -1)
    		{perror("=========  listen() Failed");}
    
    		cout << "===================================" << endl;
    
    		cout << "Server ist listening" << endl;
    		for(;; Sleep(500))
    		{
    			addr_len = sizeof(addr);
    
    			c = accept(sServer,(SOCKADDR*)&addr,&addr_len);
    			if(c == -1)
    			{
    				perror("accept() Failed");
    				continue;
    			}
    			char buffer1[1024];
    			string buffer3;
    			int bytes;
    
    			printf("client from %s connected\n",inet_ntoa(addr.sin_addr));
    			bytes = recv(sServer,buffer1,sizeof(buffer1),0);
    			buffer1[bytes] = '\0';
    			printf("\nMessage: %s \n",buffer1);
    
    			send(sServer,buffer1,sizeof(buffer1),0);
    		}
    	}
    }
    

    Client

    #include "ErrMsg.h"
    #include "Funktionen.h"
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string>
    #include <WinSock.h>
    
    #pragma comment(lib,"wsock32.lib")
    
    using namespace std;
    
    namespace Funktion
    {
    	void Data::LoginSystem(char LoginName[1024], char LoginPass[1024],char auswertung[1024])
    	{
    		WSAData Version;
    
    		if(WSAStartup(MAKEWORD(2,1), &Version))
    		{
    			MessageBoxA(NULL,"WSAStartup (); Failed","ERROR",MB_ICONINFORMATION);
    		}
    
    		SOCKET	    addr;
    		SOCKADDR_IN	in;
    		int iConnect;
    
    		SOCKET			s;
    		s = socket(AF_INET,SOCK_STREAM,0);
    
    		in.sin_addr.s_addr		= inet_addr("xxx.xxx.xxx.xxx");
    		in.sin_port				= htons(5213);
    		in.sin_family			= AF_INET;
    
    	iConnect = connect(s,(SOCKADDR*)&in,sizeof(in));
    
    	if(iConnect != 0)
    	{
    		MessageBoxA(NULL,"Server ist Offline","ERROR",MB_ICONERROR);
    
    		auswertung = "0";
    	}
    
    		send(s,LoginName,1024,0);
    		send(s,LoginPass,1024,0);
    
    		recv(s,auswertung,sizeof(auswertung),0);
    
    		WSACleanup();
    	}
    }
    



  • Wie füllst du denn LoginName und LoginPass?
    PS:
    - Komischer Aufbau. Eine Klasse "Chat" und eine Klasse "Data"? Oder sind das namespaces?
    - In Zeile 50 muss es heißen: sizeof(buffer1) - 1, da du ja garantieren musst, dass bytes ein gültiger Index in buffer1 ist.
    - Wo wir gerade beim gültigen Index sind, du guckst ja gar nicht nach ob recv() überhaupt erfolgreich war? oO
    - Zeile 43 macht nicht das was du denkst. "auswertung" ist ein Pointer, welcher eine lokale Variable der Funktion ist. Nach der Anweisung zeigt nur der Pointer auf etwas anderes, aber das, worauf er vorher gezeigt hat, bleibt unverändert. Du wolltest schreiben: "*auswertung = '\0';" <- Man beachte das Sternchen. (Stichwort: Dereferenzierung.)


Anmelden zum Antworten