java threaded socket:哪个线程收到数据包?

时间:2014-06-23 22:34:43

标签: java multithreading sockets p2p

我正在开发一个p2p项目。该项目应该能够同时发送和接收二进制文件和文本消息。我有两个独立的线程来接收文件和消息。问题是如何指定哪个线程应该接收即将到来的数据包。 现在两个操作只有一个线程更好吗?如果是,我如何识别收到的数据包类型?

3 个答案:

答案 0 :(得分:1)

您需要一个线程来管理套接字,每个线程用于聊天和文件传输。线程管理器根据您设计的用于区分数据包的协议决定谁获取数据包。

答案 1 :(得分:0)

您需要一个自定义数据包来确定哪种类型的数据包'它是。 例如,一个序列化类,它实现了一个知道它是什么类型的数据包的接口。 粗糙的结构示例。

Packet implements Serializable{
 enum type;
 Object data

 public setdata
 public getdata
 ...
 ...
}

有两种方法可以做到这一点。

1 - 做你的建议。根据数据包的类型,使用一个线程来处理文件和消息。

2 - 使用两个单独的线程。但是创建一个处理程序来传递数据包以根据数据包类型提供给正确的线程。

编辑:

哦,正如Jim所说,你需要另一个线程来管理套接字。

答案 2 :(得分:0)

  

我有两个独立的线程来接收文件和消息。

为什么?

  

问题是如何指定哪个线程应该接收即将发送的数据包。

您的第一个问题是TCP API中没有“数据包”。它提供了一个字节流。任何分组完全取决于你的两端。

你的第二个问题是首先输入read()的线程将获得到达(或已经到达)的下一个数据。

  

现在两个操作只有一个线程更好吗?

当然。

  

如果是,我如何识别收到的数据包类型?

如上所述,如果此应用程序中存在“数据包”,则必须对其进行定义。这几乎肯定会包含一个长度的单词,它也可能包含一个类型单词。

相关问题