Ich erstellte einen einfachen TCP-Server auf 8080-Port überwachen, die eine Nachricht an den Client sendet, sobald eine Verbindung hergestellt ist. Hier ist der Code.Winsock-Server-Nachricht wird nicht auf Clientseite angezeigt Terminal
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#pragma warning(disable:4996)
int main(int argc, char* argv[]) {
WSADATA wsa;
SOCKET s, new_socket;
int c;
int ret;
struct sockaddr_in server, client;
char* message = "Thank you for connecting to us but i got to go\n";
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
printf("Failed to initialize Winsock : %d", WSAGetLastError());
return 1;
}
s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET) {
printf("Error creating socket : %d", WSAGetLastError());
}
server.sin_family = AF_INET;
server.sin_port = htons(8080);
server.sin_addr.s_addr = INADDR_ANY;
if (bind(s, (struct sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) {
printf("Error binding socket : %d\n", WSAGetLastError());
exit(EXIT_FAILURE);
}
listen(s, 3);
puts("Listening for incoming connection\n");
c = sizeof(struct sockaddr_in);
while (new_socket = accept(s, (struct sockaddr*)&client, &c) != INVALID_SOCKET) {
puts("Connection established\n");
send(new_socket, message, strlen(message), 0);
}
if (new_socket == INVALID_SOCKET) {
printf("Connection failed : %d", WSAGetLastError());
return 1;
}
closesocket(s);
WSACleanup();
return 0;
}
Wenn ich dies ausführen, läuft der Server ganz gut. Ich öffne ein anderes Terminal und öffne telnet und versuche mich mit dem Server am 8080 Port zu verbinden. Dies ist das Client-seitige Terminal.
Welcome to Microsoft Telnet Client
Escape Character is 'CTRL+]'
Microsoft Telnet> open localhost 8080
Connecting To localhost...
Und das ist die Serverseite.
Aber auch nachdem der Server sagt, dass eine Verbindung hergestellt wurde, bleibt die Clientseite bei "Connecting to localhost". Ich sende die Nachricht "Vielen Dank für die Verbindung zu uns, aber ich muss gehen \ n", aber es zeigt sich nicht auf der Client-Seite. Was kann möglicherweise falsch sein?
Seit telnet nicht nur roh send/Empfangs Bytes Kanal, Telnet-Client für einige Reaktion auf die Optionen wäre es wahrscheinlich warten wh schicken Ich versuche zu verbinden (das Protokoll wird von [RFC854] (https://tools.ietf.org/html/rfc854) beschrieben. Zu Testzwecken ist es wahrscheinlich besser, einen eigenen Client zu erstellen. –