我是一个初学者,第一次尝试使用winsock建立一个tcp客户端。我使用我在示例中找到的一些代码组合了一个最小的客户端(见下文)。它基本上是工作的,也就是说,我可以接收服务器的消息,发送消息给出预期的结果。
然而,除非我添加一个循环,它不断地做一个接收/发送例程(甚至只是接收部分),连接在建立后立即关闭。我能做些什么来保持连接打开,只在有需要的时候接收或发送一些东西吗?
服务器是一个闭源软件,所以我不知道它是如何设置的。
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
int startWinsock(void) {
WSADATA wsa;
return WSAStartup(MAKEWORD(2, 2), &wsa);
}
int main(void) {
long rc;
SOCKET s;
SOCKADDR_IN addr;
printf("Starting Winsock... ");
rc = startWinsock();
if (rc != 0) {
printf("Error: unable to start Winsock, error code: %dn", rc);
}
else {
printf("done.n");
}
printf("Creating socket... ");
s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET) {
printf("Error: Unable to create socket, error code: %dn", WSAGetLastError());
}
else {
printf("done.n");
}
memset(&addr, 0, sizeof(SOCKADDR_IN));
addr.sin_family = AF_INET;
addr.sin_port = htons(10134);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
rc = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));
if (rc == SOCKET_ERROR) {
printf("Connection failed, error code: %dn", WSAGetLastError());
}
else {
printf("Connected to 127.0.0.1.n");
}
//if I add a loop here, which receives and/or sends stuff constantly, the connection stays established
return 0;
}
非常简单:
- 您的客户端试图连接到服务器。
- 如果成功,发送命令,并读取响应。
- 继续接收和发送,直到"完成",然后关闭套接字。
也就是说:
- 您可以控制何时关闭连接-套接字将保持打开状态,直到您关闭它。
- 基本上,你正在发明自己的自定义网络协议
强烈建议:
复习Beej的网络编程指南