Fenster wird automatisch geschlossen, wenn Verbindung über Sockets hergestellt wird
-
Ich hab hier einmal den Client:
//--------------------------------------------------------------------------- #include <windows.h> #include <winsock2.h> #include <vcl.h> #pragma hdrstop #include <iostream.h> #pragma argsused //Prototypen int startWinsock(void); int main() { long rc; SOCKET s; SOCKADDR_IN addr; char buf[256]; // Anzahl Zeichen, die gesendet werden char conIP[15] = "10.17.126.4"; // Ziel-IP Adresse int conPort = 12345; // Verwendeter Port memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzen addr.sin_family=AF_INET; addr.sin_port=htons(conPort); // htons() = Konvertierung für Netzwerk addr.sin_addr.s_addr=inet_addr(conIP); rc=startWinsock(); if(rc!=0) { cout << "Fehler: startWinsock, Fehlercode: " << rc << "\n"; return 1; } else { cout << "Winsock gestartet!\n"; } s=socket(AF_INET,SOCK_STREAM,0); if(s==INVALID_SOCKET) { cout << "Fehler: Der Socket konnte nicht erstellt werden, Fehlercode: " << WSAGetLastError() << "\n"; return 1; } else { cout << "Socket erstellt!\n"; } rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if(rc==SOCKET_ERROR) { cout << "Fehler: konnte nicht verbunden werden, Fehlercode: " << WSAGetLastError() << "\n"; } else { cout << "Verbunden mit " << conIP << "\n"; strcpy(buf,"Hallo wie gehts?"); rc=send(s,buf,9,0); if (rc == -1) cout << "Fehler: Nachricht konnte nicht gesendet werden, Fehlercode: " << WSAGetLastError() << "\n"; else cout << "Nachricht wurde gesendet\n"; rc=recv(s,buf,256,0); if (rc == -1) cout << "Fehler: Nachricht konnte nicht empfangen werden, Fehlercode: " << WSAGetLastError() << "\n"; else cout << "Nachricht empfangen: " << rc << "\n"; } getchar(); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }und hier den Server
#include <stdio.h> #include <windows.h> #include <winsock.h> #include <vcl.h> #pragma hdrstop #include <iostream.h> #pragma argsused //Prototypen int startWinsock(void); int main() { long rc; SOCKET acceptSocket; SOCKET connectedSocket; SOCKADDR_IN addr; // char buf[256]; // Anzahl Zeichen, die gesendet werden int conPort = 12345; // Port memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(conPort); addr.sin_addr.s_addr=INADDR_ANY; rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); } acceptSocket=socket(AF_INET,SOCK_STREAM,0); if(acceptSocket==INVALID_SOCKET) { printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket erstellt!\n"); } rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); if(rc==SOCKET_ERROR) { printf("Fehler: bind, fehler code: %d\n",WSAGetLastError()); return 1; } else { cout << "Socket an Port " << conPort << " gebunden\n"; } rc=listen(acceptSocket,10); if(rc==SOCKET_ERROR) { printf("Fehler: listen, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("acceptSocket ist im listen Modus....\n"); } connectedSocket=accept(acceptSocket,NULL,NULL); if(connectedSocket==INVALID_SOCKET) { printf("Fehler: accept, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Neue Verbindung wurde akzeptiert!\n"); } return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }Wenn ich an dem einen PC jetzt den Server starte, so dass er im Listen Modus ist und auf dem andern den Client aufrufe, schließt sich das Server Fenster automatisch.
Als Ausgabe kommt beim Client:Winsock gestartet!
Socket erstellt!
Verbunden mit 10.17.126.4
Nachricht wurde gesendet
Fehler: Nachricht konnte nicht empfangen werden, Fehlercode: 10054Aber wieso schließt sich das Fenster einfach?
-
vielleicht sollte dein server dann auch einfach warten wenn er ne neue Verbindung bekommt und net einfach beenden

} else { printf("Neue Verbindung wurde akzeptiert!\n"); } return 0; }
-
lol, wie schlecht, in dem fall sry für sinnlos post ^^
