gpt4 book ai didi

c++ - TCP 是否支持不可打印的字符?

转载 作者:可可西里 更新时间:2023-11-01 02:45:10 25 4
gpt4 key购买 nike

我是 TCP/IP 协议(protocol)的新手,想用 C++ 创建一个聊天服务器。

现在,我决定以一个字符开始我的所有传输,以告知接下来会发生什么(登录请求、要发布的消息、客户的用户名,...)。

因此,我使用诸如 0x01、0x02 之类的值来表示与登录、信息请求等相关的内容,并使用 0x10 来表示消息。

绝望的是,当我尝试用我创建的另一个程序连接到我的服务器时,我从服务器收到一个以 0x01 开头的传输(所以一切仍然正常),但是当我回复以 0x03 开头的内容时,服务器只有在我杀死客户端时才会收到它...

我认为是 select 函数并没有说有什么可读的。

这正常吗?

如果是,我是否应该将此值替换为可打印且没有特殊含义的值?

最佳答案

TCP 完全是一个二进制协议(protocol)。它定义了 IP 数据报头之后的数据包头。连续的数据流被分成数据包,因此它(希望)从点 A 顺利传输到点 B。该流包含任意八位字节(字节)。

您确定消息之间的唯一区别是初始字节值,$01$03?也许消息大小不同?也许一个实例会做一些事情来刷新流?也许消息是在 session 中按顺序发送的?

如果您需要快速传输短的、离散的消息,UDP 可能有助于防止意外的延迟。

关于c++ - TCP 是否支持不可打印的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42392969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com