具有多个逻辑数据流的单个套接字连接(区分数据包)

Single socket connection with multiple logical data streams (differentiating packets)

本文关键字:连接 套接字 数据包 单个 数据流      更新时间:2023-10-16

我正在用C++制作一个程序,使用windows套接字,我想要一个套接字,但能够从不同的线程发送数据,并区分服务器端哪个线程发送了数据,因为它们有不同的应用程序。本质上是使用单个套接字连接的逻辑数据流。我很难找到区分数据包服务器端的方法。我能想到的最好的方法是用几个字节来启动每个数据包,指示是哪个线程发送的。有更好的方法吗?

类似于如何将单个端口用于多个逻辑数据流(Winsock)?但我很难区分数据包。

我认为,最好的办法是将一个唯一的id与每个任务关联起来,创建一个处理网络的线程,并(如您所说)将任务id添加到数据包中。

在接收方,你也可以这样做:一个线程读取数据包,并根据task-id分发它们的内容。

如果所谓的数据包不是服务器所知道的全部固定长度,则还需要指示数据包的开始或结束位置。