我是TCP / IP协议的新手,想在C ++中为聊天创建服务器。
现在,我决定用一个角色开始我的所有传输,告诉接下来是什么(登录请求,要发布的消息,客户端的用户名,......)。
所以,我使用0x01,0x02等值来表示与登录,信息请求,...和0x10相关的消息。
绝望地,当我尝试使用我创建的另一个程序连接到我的服务器时,我收到一个来自服务器的传输,它以0x01开头(所以一切都还可以),但是当我回复以0x03开头的东西时,服务器只在我杀死客户端时收到它...
我认为这是选择功能并没有说有什么可读的。
这是正常的吗?
如果是,我应该用可打印且没有特殊含义的值替换这个值吗?
答案 0 :(得分:4)
TCP完全是一种二进制协议。它定义了一个跟在IP数据报头之后的数据包头。连续数据流被分成数据包,因此它(希望)从A点平滑地流向B点。流包含任意八位字节(字节)。
您确定消息之间的唯一区别是初始字节值$01
与$03
吗?也许邮件大小不同?也许有一个实例可以刷新流?也许消息是在会话中按顺序发送的?
如果您需要快速传输短的离散消息,UDP可能有助于防止意外延迟。