Winsock
-
Hallo ich versuche gerade bei meinem Winsock Server Befehle einzustellen:
while(rc!=SOCKET_ERROR) { send(client,buf2,strlen(buf2),0); rc=recv(client,buf,256,0); if(rc==0) { std::cout<<"Server hat die Verbindung getrennt..\n"; system("PAUSE"); return 0; } if(rc==SOCKET_ERROR) { std::cout<<"Fehler: recv, fehler code: "<<WSAGetLastError(); break; } buf[rc]='\0'; cout<<"Clien sendet\n"<<buf; if (buf=="1") { cout<<"Befehl eingeben: "; cin>>command; } }Aber wenn ich beim client die 1 drücke dann zeigt geht der Server einfach nicht in diese if abfrage
if (buf=="1") { cout<<"Befehl eingeben: "; cin>>command; }Was ist denn da falsch ?
Kompletter Client:
//Client #include <windows.h> //Required for socket init #include <iostream> using namespace std; //Client int main() { char buf2[256]; string ip; long rc; char buf[256]; int nret; SOCKET kSock; WSAData wsdata; WORD wsver=MAKEWORD(2, 0); //Winsock version 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 12345 sin.sin_addr.s_addr=inet_addr("127.0.0.1"); //Connect to localhost sin.sin_family=AF_INET; rc = connect(kSock,(sockaddr*)&sin, sizeof(sin)); if(rc==SOCKET_ERROR) { //Check the condition std::cout<<"Connect failed, error: "<<WSAGetLastError(); //Returns error code WSACleanup(); //Cleanup the library return -1; } else { std::cout<<"Connection successful!\n"; } while(rc!=SOCKET_ERROR) //wenn kein error, hier handelt es sich um eine endlosschleife dies erkennt man an dem while { std::cout<<"\nZeichenfolge eingeben [max 256]: "; cin>>buf; send(kSock,buf,strlen(buf),0); recv(kSock, buf2, strlen(buf2), 0); cout<<"Server Antwortet: "<<buf2; } rc=recv(kSock,buf,256,0); if(rc==0) { cout<<"Server hat die Verbindung getrennt..\n"; system("PAUSE"); return 0; } if(rc==SOCKET_ERROR) { cout<<"Fehler: recv, fehler code: "<<WSAGetLastError(); system("PAUSE"); return 0; } buf[rc]='\0'; system("PAUSE"); closesocket(kSock); return 0; }Kompletter Server
#include <windows.h> //Required for socket init #include <iostream> using namespace std; //server int main() { string command; char buf2[]="test"; long rc; 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"; rc=listen(kSock,10); if(rc==SOCKET_ERROR) { std::cout<<"Error "<<GetLastError(); system("PAUSE"); return 0; } else { cout<<"acceptSocket ist im listen Modus....\n"; } // Verbindung annehmen client=accept(kSock,NULL,NULL); if(client==INVALID_SOCKET) { std::cout<<"Fehler: accept, fehler code: <<"<<WSAGetLastError(); return 1; } std::cout<<"Neue Verbindung wurde akzeptiert!\n"; // Daten austauschen while(rc!=SOCKET_ERROR) { send(client,buf2,strlen(buf2),0); rc=recv(client,buf,256,0); if(rc==0) { std::cout<<"Server hat die Verbindung getrennt..\n"; system("PAUSE"); return 0; } if(rc==SOCKET_ERROR) { std::cout<<"Fehler: recv, fehler code: "<<WSAGetLastError(); break; } buf[rc]='\0'; cout<<"Clien sendet\n"<<buf; if (buf=="1") { cout<<"Befehl eingeben: "; cin>>command; } } system("PAUSE"); closesocket(client); //Close both socket handles closesocket(kSock); WSACleanup(); return 0; }
-
Hallo,
ich habe jetzt nicht den ganzen Code betrachtet, aber das hier:
if (buf=="1")tut nicht was es soll. buf ist doch ein Zeiger, du willst doch nicht prüfen, ob der Zeiger den gleichen Wert hat wie der Zeiger, der auf die Zeichenkette "1" verweist...Also alles klar, hoffe ich...

MfG,
Probe-Nutzer
-
Probe-Nutzer schrieb:
ich habe jetzt nicht den ganzen Code betrachtet, aber das hier:
if (buf=="1")tut nicht was es soll.
versuch doch mal:
if (*buf == '1')

-
Hallo,
versuch doch mal: if (*buf == '1')
Du Lerneffekt-Zerstörer...

MfG,
Probe-Nutzer
-
Wieso ist buf ein Zeiger buf wurde doch gar nicht als Zeiger Initaliert und es Zeigt auch nichts auf buf
Wie kann man dort erkennen das buf ein Zeiger ist?
-
Arrays sind Zeiger in disguise.
-
mhhm stimmt da war mal irgendwas. ^^ ty
-
Kennt wer den C++ Befehl für gets();
Weil ich kenn den nur für C
http://www.cplusplus.com/reference/clibrary/cstdio/gets.html
-
http://www.cplusplus.com/reference/iostream/cin.html
#include <string> ... std::string str; std::cin >> str;
-