Problem mit Winsocks
-
Hallo ich kann an meinen Server immer nur 1 Befehl senden danach trennt der einfach immer die Verbindung:
Server
#include <windows.h> //Required for socket init #include <iostream> using namespace std; //server int main() { SOCKET kSock; SOCKET client; int len; char buf[256]; WSAData wsdata; //Declare WSAData WORD wsver=MAKEWORD(2, 0); //We want Winsock 2.0 int nret=WSAStartup(wsver, &wsdata); //Pass version 2.0 and pointer to implement if(nret != 0) { //Init failed /*A successful return value should be 0 */ std::cout<<"Startup failed, error code: "<<WSAGetLastError(); //Returns error code WSACleanup(); //Cleanup Winsock library return -1; } std::cout<<"Init success\n"; kSock=socket(AF_INET, SOCK_STREAM, 0); if(kSock == INVALID_SOCKET) { std::cout<<"Socket init failed"; return -1; } std::cout<<"Socket initialized\n"; sockaddr_in sin; sin.sin_port=htons(12345); sin.sin_addr.s_addr=INADDR_ANY; sin.sin_family=AF_INET; if(bind(kSock,(sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR) { std::cout<<"Failed to bind\n"; WSACleanup(); //Cleanup Winsock library return -1; } std::cout<<"Bind successful!\n"; while (listen(kSock, SOMAXCONN) == SOCKET_ERROR); //Loop in order to constantly listen /* set the number of connections to SOMAXCONN, in which case the provider chooses a reasonable value (5 in Windows XP Professional) */ len = sizeof(sin); client=accept(kSock, (sockaddr*)&sin, &len); std::cout<<"Connection established!\n"; send(client, buf, sizeof(buf), 0); //Send "Hello" recv(kSock, buf, sizeof(buf), 0); std::cout <<"Client Antwortet: "<< buf; system("PAUSE"); closesocket(client); //Close both socket handles closesocket(kSock); WSACleanup(); return 0; }Client
#include <windows.h> //Required for socket init #include <iostream> using namespace std; //client int main() { char buf[256]; int nret; SOCKET kSock; WSAData wsdata; //Declare WSAData WORD wsver=MAKEWORD(2, 0); //We want Winsock 2.0 nret=WSAStartup(wsver, &wsdata); //Pass version 2.0 and pointer to implement if(nret != 0) { //Init failed /*A successful return value should be 0 */ std::cout<<"Startup failed, error code: "<<WSAGetLastError(); //Returns error code WSACleanup(); //Cleanup Winsock library return -1; } std::cout<<"Init success\n"; kSock=socket(AF_INET, SOCK_STREAM, 0); if(kSock == INVALID_SOCKET) { std::cout<<"Socket init failed"; return -1; } std::cout<<"Socket initialized\n"; sockaddr_in sin; sin.sin_port=htons(12345); //Connect to port 80 sin.sin_addr.s_addr=inet_addr("127.0.0.1"); //Connect to localhost sin.sin_family=AF_INET; if(connect(kSock,(sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR) { //Check the condition std::cout<<"Connect failed, error: "<<WSAGetLastError(); //Returns error code WSACleanup(); //Cleanup the library return -1; } std::cout<<"Connection successful!\n"; cout<<"Befehl eingeben: "; cin>>buf; send(kSock, buf, sizeof(buf), 0); recv(kSock, buf, sizeof(buf), 0); //Receive "Hello" from server cout<<"Connect ausgabe: "<<connect; std::cout <<"Server Antwortet: "<<buf; system("PAUSE"); closesocket(kSock); return 0; }Hat jemand eine Ahnung was da falsch ist?
-
Ja Dein Server wartet auf eine Verbindung, sendet "Hallo" und empfängt einmal.
Danach ist das Programm zu ende.
Also musst Du in einer Schleife empfangen und erst beenden, wenn es gewünscht wird.
-
Sie arbeiten mit Visual Studio 2005/2008? Klasse!
Testen Sie heute: Tastenkombination Strg + k + f!
Wirkt wunder, auch bei Leuten die keinen blassen Schimmer von jeglicher Formatierung von Quellcode haben!