Winsock Server über Internet erreichen
-
Hallo ich hab einen Winsock Server und einen Client dazu.
Wenn ich den Server starte kann ich ihn über die PC IP 127.0.0.1 erreichen was aber wenn ich den Server über meine Internet IP ansprechen will ?
Was muss man da machen damit das funktioniert ?
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); nret=WSAStartup(wsver, &wsdata); if(nret != 0) { cout<<"Startup failed, error code: "<<WSAGetLastError(); WSACleanup(); return -1; } cout<<"Init success\n"; kSock=socket(AF_INET, SOCK_STREAM, 0); if(kSock == INVALID_SOCKET) { cout<<"Socket init failed"; return -1; } cout<<"Socket initialized\n"; cout<<"IP eingeben: "; cin>>ip; sockaddr_in sin; sin.sin_port=htons(12345); sin.sin_addr.s_addr=inet_addr( ip.c_str() ); sin.sin_family=AF_INET; rc = connect(kSock,(sockaddr*)&sin, sizeof(sin)); if(rc==SOCKET_ERROR) { //Check the condition cout<<"Connect failed, error: "<<WSAGetLastError(); //Returns error code WSACleanup(); return -1; } else { cout<<"Connection successful!\n"; } while(rc!=SOCKET_ERROR) { 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"; return 0; return 0; } if(rc==SOCKET_ERROR) { cout<<"Fehler: recv, fehler code: "<<WSAGetLastError(); return 0; return 0; } buf[rc]='\0'; closesocket(kSock); return 0; }Server:
#include <windows.h> //Required for socket init #include <iostream> using namespace std; //server int main() { char buf2[]="test"; long rc; SOCKET kSock; SOCKET client; int len; char buf[256]; WSAData wsdata; 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) { cout<<"Startup failed, error code: "<<WSAGetLastError(); WSACleanup(); return -1; } cout<<"Init success\n"; kSock=socket(AF_INET, SOCK_STREAM, 0); if(kSock == INVALID_SOCKET) { cout<<"Socket init failed"; return -1; } 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) { cout<<"Failed to bind\n"; WSACleanup(); return -1; } cout<<"Bind successful!\n"; rc=listen(kSock,10); if(rc==SOCKET_ERROR) { 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) { cout<<"Fehler: accept, fehler code: <<"<<WSAGetLastError(); return 1; } 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) { cout<<"Server hat die Verbindung getrennt..\n"; system("PAUSE"); return 0; } if(rc==SOCKET_ERROR) { cout<<"Fehler: recv, fehler code: "<<WSAGetLastError(); break; } buf[rc]='\0'; cout<<"Client sendet: "<<system(buf); cout<<"\n"; } closesocket(client); //Close both socket handles closesocket(kSock); WSACleanup(); return 0; }
-
srv schrieb:
Hallo ich hab einen Winsock Server und einen Client dazu.
Wenn ich den Server starte kann ich ihn über die PC IP 127.0.0.1 erreichen was aber wenn ich den Server über meine Internet IP ansprechen will ?
Was muss man da machen damit das funktioniert ?
Falls Dein Server hinter einem Router sitzt, mußt Du den entsprechenden Port auf die richtige LAN-IP forwarden, falls nicht, mußt Du gar nix machen ...
-
Belli schrieb:
Falls Dein Server hinter einem Router sitzt, mußt Du den entsprechenden Port auf die richtige LAN-IP forwarden, falls nicht, mußt Du gar nix machen ...
Vergessen: Falls Du noch eine FireWall - Software auf Deinem Rechner laufen hast, muß diese natürlich auch Anfragen auf dem entsprechenden Port durchlassen.
-
ok danke