Winsock problem



  • Ich hab ein problem mit winsock

    hier der quelltext von der server.cpp datei:

    #include "stdafx.h"
    #include <iostream>
    #include <WinSock.h>
    #include <string>
    #pragma comment(lib, "wsock32.lib")
    using namespace std;
    
    int main()
    {
    	////////////////////
    	// Socket a(send) //
    	////////////////////
    			SOCKET a;
    			sockaddr_in server_a;
    			unsigned long addr_a;
    
    	///////////////////
    	// Socket b(retv)//
    	///////////////////
    			SOCKET b;
    			sockaddr_in server_b;
    			unsigned long addr_b;
    
    	///////////////////////////
    	// send() initialisieren //
    	///////////////////////////
    			/*
    			WSADATA data_a;
    			WSAStartup(MAKEWORD(1, 1), &data_a);
    
    			a = socket(AF_INET, SOCK_STREAM, 0);
    			if(a == SOCKET_ERROR){
    				cout << "Fehler bei Socket()!" << endl;
    			}
    			addr_a = inet_addr("127.0.0.1");
    			memcpy((char *)&server_a.sin_addr, &addr_a, sizeof(addr_a));
    			server_a.sin_family = AF_INET;
    			server_a.sin_port = htons(15001);
    
    			if(connect(a, (sockaddr *)&server_a, sizeof(server_a)) == SOCKET_ERROR){
    				cout << "Fehler bei connect()!" << endl;
    				cin.get();
    				return 0;
    			}
    			*/
    	///////////////////////////
    	// recv() initialisieren //
    	///////////////////////////
    			WSADATA data_b;
    			WSAStartup(MAKEWORD(1, 1), &data_b);
    
    			b = socket(AF_INET, SOCK_STREAM, 0);
    			if(b == SOCKET_ERROR){
    				cout << "Fehler bei Socket()!";
    				cin.get();
    				return 0;
    			}
    			server_b.sin_family = AF_INET;
    			server_b.sin_addr.s_addr = INADDR_ANY;
    			server_b.sin_port = htons(15000);
    
    			if(bind(b, (sockaddr *)&server_b, sizeof(server_b)) == SOCKET_ERROR){
    				cout << "Fehler bei bind() (retv)!";
    				cin.get();
    				return 0;
    			}
    
    			if(listen(b, 5) == SOCKET_ERROR){
    				cout << "Fehler bei listen()!";
    				cin.get();
    				return 0;
    			}
    	///////////////
    	// einloggen //
    	///////////////
    			cout << "Waiting for Connection..." << endl;
    
    			// auf anfrage warten //
    			ip_accepted_back:
    			while(true){
    				SOCKET s2;
    				int len = sizeof(server_b);
    				if((s2 = accept(b, (sockaddr*)&server_b, &len)) == SOCKET_ERROR){
    					cout << "Fehler bei accept()!" << endl;
    					cin.get();
    					return 0;
    				}
    				int size;
    				char log_back[1025];
    				memset(log_back, 0, 1025);
    				while((size = recv(s2, log_back, 1024, 0)) > 0){
    					cout << "Connection founded..." << endl;
    					cout << log_back << endl;
    					string log_b = log_back;
    					int caseswitch = log_back[0];
    					cout << log_back[0] << endl;
    					cout << caseswitch << endl;
    					switch (caseswitch){
    					case 49:
    						goto ip_accepted;
    						break;
    					default:
    						return 0;
    						break;
    					}
    					memset(log_back, 0, 1025);
    				}
    			}
    
    			// accepted senden //
    			ip_accepted:
    			cout << "Ip accepted..." << endl;
    
    			// a isn't initialized //
    			string log = "1";
    			send(a, log.c_str(), log.length(), 0);
    
    			// ip senden //
    			ip_send:
    
    	///////////////
    	// empfangen //
    	///////////////
    		while(true){
    			SOCKET s2;
    			int len = sizeof(server_b);
    			if((s2 = accept(b, (sockaddr*)&server_b, &len)) == SOCKET_ERROR){
    				cout << "Fehler bei accept()!" << endl;
    				cin.get();
    				return 0;
    			}
    			int size;
    			char msg[1025];
    			memset(msg, 0, 1025);
    			while((size = recv(s2, msg, 1024, 0)) > 0){
    				cout << msg << endl;
    				memset(msg, 0, 1025);
    			}
    		}	
    
    	// send(a, msg.c_str(), msg.length(), 0);
    
    	////////////////////////
    	// Socket a schließen //
    	////////////////////////
    			closesocket(a);
    			WSACleanup();
    
    	////////////////////////
    	// Socket a schließen //
    	////////////////////////
    			closesocket(b);
    			WSACleanup();
    
    	cin.get();
    	return 0;
    }
    

    hier der quelltext von der client.cpp datei:

    #include "stdafx.h"
    #include <iostream>
    #include <WinSock.h>
    #include <string>
    #pragma comment(lib, "wsock32.lib")
    using namespace std;
    
    int main()
    {
    	////////////////////
    	// Socket a(send) //
    	////////////////////
    			SOCKET a;
    			sockaddr_in server_a;
    			unsigned long addr_a;
    
    	///////////////////
    	// Socket b(retv)//
    	///////////////////
    			SOCKET b;
    			sockaddr_in server_b;
    			unsigned long addr_b;
    
    	///////////////////////////
    	// send() initialisieren //
    	///////////////////////////
    			WSADATA data_a;
    			WSAStartup(MAKEWORD(1, 1), &data_a);
    
    			a = socket(AF_INET, SOCK_STREAM, 0);
    			if(a == SOCKET_ERROR){
    				cout << "Fehler bei Socket()!" << endl;
    			}
    			addr_a = inet_addr("127.0.0.1");
    			memcpy((char *)&server_a.sin_addr, &addr_a, sizeof(addr_a));
    			server_a.sin_family = AF_INET;
    			server_a.sin_port = htons(15000);
    
    			if(connect(a, (sockaddr *)&server_a, sizeof(server_a)) == SOCKET_ERROR){
    				cout << "Fehler bei connect()!" << endl;
    				cin.get();
    				return 0;
    			}
    	///////////////////////////
    	// recv() initialisieren //
    	///////////////////////////
    			WSADATA data_b;
    			WSAStartup(MAKEWORD(1, 1), &data_b);
    
    			b = socket(AF_INET, SOCK_STREAM, 0);
    			if(b == SOCKET_ERROR){
    				cout << "Fehler bei Socket()!";
    				cin.get();
    				return 0;
    			}
    			server_b.sin_family = AF_INET;
    			server_b.sin_addr.s_addr = INADDR_ANY;
    			server_b.sin_port = htons(15001);
    
    			if(bind(b, (sockaddr *)&server_b, sizeof(server_b)) == SOCKET_ERROR){
    				cout << "Fehler bei bind() (retv)!";
    				cin.get();
    				return 0;
    			}
    
    			if(listen(b, 5) == SOCKET_ERROR){
    				cout << "Fehler bei listen()!";
    				cin.get();
    				return 0;
    			}
    	///////////////
    	// einloggen //
    	///////////////
    
    			// ip_accepted senden //
    			ip_accepted:
    			string log = "1";
    			send(a, log.c_str(), log.length(), 0);
    			cout << "Ip accepted-anfrage gesendet - wartet auf antwort" << endl;
    			goto ip_accepted_antwort;
    			// auf antwort warten //
    			ip_accepted_antwort:
    			while(true){
    				SOCKET s2;
    				int len = sizeof(server_b);
    				if((s2 = accept(b, (sockaddr*)&server_b, &len)) == SOCKET_ERROR){
    					cout << "Fehler bei accept()!" << endl;
    					cin.get();
    					return 0;
    				}
    				int size;
    				char log_back[1025];
    				memset(log_back, 0, 1025);
    				while((size = recv(s2, log_back, 1024, 0)) > 0){
    					string log_b = log_back;
    					int caseswitch = log_back[0];
    					cout << caseswitch << endl;
    					switch (caseswitch){
    					case 11:
    						goto ip_send;
    						break;
    					default:
    						return 0;
    						break;
    					}
    					memset(log_back, 0, 1025);
    				}
    			}
    
    			// ip senden //
    			ip_send:
    
    	///////////////
    	// empfangen //
    	///////////////
    		while(true){
    			SOCKET s2;
    			int len = sizeof(server_b);
    			if((s2 = accept(b, (sockaddr*)&server_b, &len)) == SOCKET_ERROR){
    				cout << "Fehler bei accept()!" << endl;
    				cin.get();
    				return 0;
    			}
    			int size;
    			char msg[1025];
    			memset(msg, 0, 1025);
    			while((size = recv(s2, msg, 1024, 0)) > 0){
    				cout << msg << endl;
    				memset(msg, 0, 1025);
    			}
    		}	
    
    	////////////
    	// senden //
    	////////////
    			string msg;
    
    			while(msg != "quit")
    			{
    				cout << "\nNachricht schreiben: \n";
    				getline(cin, msg);
    				send(a, msg.c_str(), msg.length(), 0);
    			}
    
    	////////////////////////
    	// Socket a schließen //
    	////////////////////////
    			closesocket(a);
    			WSACleanup();
    
    	////////////////////////
    	// Socket a schließen //
    	////////////////////////
    			closesocket(b);
    			WSACleanup();
    
    	cin.get();
    	return 0;
    }
    

    es kommt die meldung, dass bei der server.cpp datei
    der socket a, den ich oben definiert habe, nicht initialisiert ist.

    kann mir irgendwer helfen?(bin ein totaler anfänger...)



  • Solltest vielleicht den Code zum Erstellen des A-Sockets nicht auskommentieren. 😉 WSAStartup benötigst Du aber nur einmal am Anfang.



  • Oh, scheisse 😮 🙄

    Wenn ich das aber mache, dann kommt der "Fehler-bei-connect()!" error. 😞



  • ok ich habs jetzt selber gemerkt
    wenn send() initialisiert wird, dann ist
    ja zu dem zeitpunkt keiner da, der das zeug empfängt
    ich habs jetzt woanders eingefügt und es funzt

    Danke, ich hätte das wahrscheinlich noch wochen übersehen 😃

    virusscript24



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ (auch C++0x und C++11) 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.



  • virusscript24 schrieb:

    ok ich habs jetzt selber gemerkt
    wenn send() initialisiert wird, dann ist
    ja zu dem zeitpunkt keiner da, der das zeug empfängt
    ich habs jetzt woanders eingefügt und es funzt

    Jo, genau. Schieb einfach Codestücke so lange in der Gegend rum bis es funktioniert, irgendwann passt es dann schon.



  • hustbaer schrieb:

    virusscript24 schrieb:

    ok ich habs jetzt selber gemerkt
    wenn send() initialisiert wird, dann ist
    ja zu dem zeitpunkt keiner da, der das zeug empfängt
    ich habs jetzt woanders eingefügt und es funzt

    Jo, genau. Schieb einfach Codestücke so lange in der Gegend rum bis es funktioniert, irgendwann passt es dann schon.

    Schon der Name sagt das er's richtig drauf hat! Solche Leute sollte man verbannen aus den Foren!

    Solche nenne ich script kiddies!

    Sagmal hast Du Dich mal intensiv mit Socket's unter Windows beschäftigt?



  • Der hat doch eins am Sender!



  • WSAStartup(MAKEWORD(1, 1), &data_b);
    

    Sag mal lebst Du in der Steinzeit?

    Und der rest vom Code ist auch sehr merkwürdig!?
    Und die Formatierung bzw. der Style ist fraglich bis bedenklich...

    Nur so nebenbei...



  • Der Name is doch egal - ich brauchte halt einen, der noch frei war...



  • -lowbyte- schrieb:

    WSAStartup(MAKEWORD(1, 1), &data_b);
    

    Sag mal lebst Du in der Steinzeit?

    ich hab stundenlang gegoogelt und keine andere lösung gefunden, ok? 😡



  • Außerdem hat der typ in dem tut das auch so gemacht
    &
    ich bin anfänger und hab wie gesagt keine andere lösung
    gefunden.





  • Aber das is englisch...
    Ich will damit nich sagen, das ich kein englisch kann,
    aber auf deutsch wäre es halt einfacher 🙄
    (Klar kann man es mit google übersetzen, aber dann werden auch die englischen codebeispiele mitübersetzt 😞 )



  • virusscript24 schrieb:

    Aber das is englisch...

    Ja, wie fast alle guten Infos zum Thema Programmieren.



  • Leider... 😞



  • Hab das problem jetzt selber gelöst, trotzdem danke 🙂



  • virusscript24 schrieb:

    Leider... 😞

    Der Wink mit dem Zaunpfahl ist wohl nicht angekommen, also nochmal mit dem ganzen Zaun: lern Englisch.

    Und bevor du jetzt schreibst "kann ich ja": kannst du nicht, zumindest nicht ausreichend gut. Sonst würdest du nämlich keine deutschen Texte vorziehen.



  • http://www.c-worker.ch/tuts/wstut_op.php <-- Deutsch

    http://www.madwizard.org/programming/tutorials/netcpp/ <-- Umfangreiches Winsock Tutorial Englisch (unten rechts auf der HP gehts zum weiter. [nicht das du denkst das Tutorial hat nur 1 Seite^^] )



  • THX 🙂


Anmelden zum Antworten