【发布时间】:2024-01-08 06:35:01
【问题描述】:
我正在按照this sample code 编写一个非常简单的套接字服务器。服务器已启动并正在运行,我可以通过 telnet 连接到它(实际上是使用 Putty)。每当收到新连接时,我都会生成一个新线程,代码如下:
DWORD WINAPI receive_cmds(LPVOID lpParam)
{
char outbuffer[100];
outbuffer[0] = '\0';
char inbuffer[100];
inbuffer[0] = '\0';
int res;
SOCKET current_client = (SOCKET)lpParam;
while (1) {
res = recv(current_client, inbuffer, sizeof inbuffer - 1, 0);
if (res > 0) {
inbuffer[res] = '\0';
printf("Got '%s'\n", inbuffer);
}
Sleep(10);
if (res == 0) {
closesocket(current_client);
ExitThread(0);
}
//printf("%s\n", inbuffer);
strcpy(inbuffer, "");
}
}
我一连接它就会打印出这个乱码:
如果我在客户端输入“hello”然后输入“*”,这就是我得到的:
即使我明确声明了行'\0'的结尾,它似乎占用了更多的行,而且我不知道为什么它会打印两次输入,第二次是第一个减去第一个一两个字符。
对了解正在发生的事情有任何帮助吗?提前致谢。
编辑:根据 unwind 的建议进行编辑
【问题讨论】: