c/c++语言开发共享C Winsock编程:输入垃圾

我正在编写一个非常简单的套接字服务器,遵循此示例代码 。 服务器启动并运行,我可以通过telnet连接到它(实际上使用Putty)。 每当收到新连接时,我会生成一个新线程,代码如下:

DWORD WINAPI receive_cmds(LPVOID lpParam) { char outbuffer[100]; outbuffer[0] = ''; char inbuffer[100]; inbuffer[0] = ''; int res; SOCKET current_client = (SOCKET)lpParam; while (1) { res = recv(current_client, inbuffer, sizeof inbuffer - 1, 0); if (res > 0) { inbuffer[res] = ''; printf("Got '%s'n", inbuffer); } Sleep(10); if (res == 0) { closesocket(current_client); ExitThread(0); } //printf("%sn", inbuffer); strcpy(inbuffer, ""); } } 

一旦我连接它打印这个乱码:

C Winsock编程:输入垃圾

如果我在客户端输入“hello”然后“stackoverflow”,这就是我得到的:

C Winsock编程:输入垃圾

即使我明确地声明了行’ 0’的结尾,它似乎需要更多的行,加上我不知道为什么它打印输入两次,第二个是第一个减去第一个或第二个字符。

有什么帮助理解发生了什么? 提前致谢。

编辑:根据展开的建议进行相应编辑

    您应该做更好的错误检查,以及更合理的缓冲区处理:

     res = recv(current_client, inbuffer, sizeof(inbuffer), 0); 

    应该

     res = recv(current_client, inbuffer, sizeof inbuffer - 1, 0); if (res > 0) { inbuffer[res] = ''; printf("Got '%s'n", inbuffer); } 

    您需要在缓冲区中为终结器留出空间,因此您无法使用所有缓冲区来接收数据。 你应该检查-1,并在打印之前终止缓冲区使其成为一个字符串。

    我猜recv()返回“-1”(意思是错误)。

    我必须看到你的其余代码才能猜出原因。 尝试测试返回-1然后调用WSAGetLastError()以找出错误的原因。

      以上就是c/c++开发分享C Winsock编程:输入垃圾相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/518793.html

      (0)
      上一篇 2020年12月4日
      下一篇 2020年12月4日

      精彩推荐