【问题标题】:Multithreaded application with UDP + java使用 UDP + java 的多线程应用程序
【发布时间】:2011-02-13 15:45:41
【问题描述】:

我在制作多线程数据报套接字以在 java 中学习时遇到问题。

我有一个 Server 类,它产生两个线程 Send 和 Recieve,每个线程当前具有相同的 IP“localhost”用于测试目的和不同的端口用于通信。

另一端我有一个客户端类,它从发送端口接收连接数据,然后通过服务器的接收端口请求另一个数据包。

我遇到的问题是,当我同时运行它们时,服务器发送数据,客户端接收数据,但方向相反....

那么有谁知道可能是什么问题......我如何在同一台机器上运行客户端和服务器之间的相互通信过程以查看它是如何运行的......

这是部分代码

产生两个线程:-

    SendServer SendThread = new SendServer();
SendThread.run();
RecieveServer RecieveThread = new RecieveServer();
RecieveThread.run();

在发送线程中,我声明一个带有 localhost 和一个端口号的 DatagramPacket,类似地,我为带有其他端口号的接收线程执行此操作

在客户端,我用 2 个端口编写了 2 个套接字,一个用于发送,另一个用于接收...

这个程序的错误是什么...线程一次运行一个的问题导致服务器端无法接收??

请帮忙..

【问题讨论】:

    标签: java sockets port


    【解决方案1】:

    如果服务器和客户端要在同一台机器上运行,它们需要监听不同的端口号。听起来现在您有客户端和服务器的接收器使用一个端口号,而客户端和服务器的发送器使用另一个端口号。那个配对是错误的。您希望服务器的发送方和接收方使用一个端口号,而客户端的发送方和接收方使用不同的端口号。

    由于这是多线程,您可能会遇到来自服务器的所有响应都发往同一端口的问题。这意味着您必须有一个序列化的套接字读取器,它能够读取数据包并区分它应该去哪个线程。否则,必须让套接字在同一端口上侦听将允许一个套接字从原本用于另一个线程套接字的线路中读取数据包。

    【讨论】:

    • No @unholysampler 如果它看起来令人困惑,那么我很抱歉,但我使用了相同的配对发送服务器和客户端接收,反之亦然......
    • @user506710:由于您似乎还不清楚,您能否列出您用于每个套接字的实际端口号的示例。我还编辑了我的答案以讨论多线程和使用相同的端口号。
    猜你喜欢
    • 2018-05-09
    • 2012-05-29
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多