具有多个逻辑数据流的单套接字连接(区分数据包)
Posted
技术标签:
【中文标题】具有多个逻辑数据流的单套接字连接(区分数据包)【英文标题】:Single socket connection with multiple logical data streams (differentiating packets) 【发布时间】:2012-03-28 12:46:30 【问题描述】:我正在使用 Windows 套接字在 C++ 中编写程序,我想要一个套接字,但能够从不同的线程发送数据并区分服务器端哪个线程发送数据,因为它们具有不同的应用程序。本质上是使用单个套接字连接的逻辑数据流。我很难找到区分数据包服务器端的方法。我能想到的最好的方法是用几个字节开始每个数据包,指示哪个线程发送了它。有没有更好的方法来做到这一点?
类似于How to use single port for multiple logical data streams (Winsock)?,但我一直在区分数据包。
【问题讨论】:
【参考方案1】:你最好的选择(我认为)是为每个任务关联一个唯一的 id,创建一个处理网络的单个线程,并(如你所说)将 task-id 添加到数据包中。
在接收端你也这样做:一个线程读取数据包并根据任务 ID 分发它们的内容。
【讨论】:
【参考方案2】:如果所谓的数据包不是服务器知道的所有固定长度,您还需要一个数据包开始或结束位置的指示。
【讨论】:
以上是关于具有多个逻辑数据流的单套接字连接(区分数据包)的主要内容,如果未能解决你的问题,请参考以下文章