我目前正在学习使用unix域套接字进行编程,我对此有疑问。 分隔信息的标准方法是什么? 例如。服务器写入两条消息,客户端需要可以执行两次读取以获取消息。 我想我可以通过在每条消息的末尾附加一个特定的char序列来“定义”我自己的协议,但这似乎并不正确。 写入套接字时,null char似乎被抛弃了。 我会非常感激一些澄清,特别是如果它在接下来的两个小时内到来的话:D。
答案 0 :(得分:3)
使用SOCK_DGRAM
套接字,您将在源写入和目标读取之间获得一对一的对应关系。
使用SOCK_STREAM
,您确实需要在套接字提供的流之上使用应用程序级协议。通常的选择是:
答案 1 :(得分:2)
首先,“unix套接字”通常是指“unix域套接字”,这是一种特殊形式的IPC。
写入套接字
时,null char似乎被抛弃了
这不太可能。你的写作可能不对。
但这似乎不对
更简单的方法是在每个“消息”前面加上包含长度的标题。例如
+---+---------+---+-------+
| 3 | | 5 | ... |
+---+---------+---+-------+
更简单的方法是使用具有消息概念的协议,即UDP或SCTP,其中send
最多等于一个recv
。