我在java中为学习目的制作多线程数据报套接字时遇到了问题。
我有一个Server类,它产生两个线程Send and Recieve,每个线程目前都有相同的IP“localhost”用于测试目的和不同的端口进行通信。
另一端我有一个Client类,它从Send端口接收连接数据,然后通过Server的Recieve端口发出另一个数据包的请求。
我遇到的问题是,当我同时运行它们时,服务器会发送数据,客户端会收到数据,但方向相反....
所以有人知道可能是什么问题....如何在同一台机器上的客户端和服务器之间运行互通过程,看看它是如何运行的....
这是代码的一部分
产生两个线程: -
SendServer SendThread = new SendServer();
SendThread.run();
RecieveServer RecieveThread = new RecieveServer();
RecieveThread.run();
在发送线程中,我声明了一个带有localhost和一个portno的DatagramPacket,同样地,我用一些其他端口号来接收线程
在客户端,我用2个端口编写2个插槽,并使用一个用于发送和其他用于接收......
此程序中的错误是什么?一次运行一个线程的问题是否会导致服务器端无法接收?
请帮助..
答案 0 :(得分:0)
如果服务器和客户端将在同一台计算机上运行,则需要侦听不同的端口号。听起来现在你的客户端和服务器的接收器使用一个端口号,而客户端和服务器的发送器使用另一个端口号。这种配对是错误的。您希望服务器的发送方和接收方使用一个端口号,并且客户端的发送方和接收方使用不同的端口号。
由于这是多线程,因此您可能遇到来自服务器的所有响应都指向同一端口的问题。这意味着你必须有一个序列化套接字读取器,它能够读入数据包并区分它应该去哪个线程。否则,不得不在同一端口上侦听套接字将允许一个套接字从另一个线程套接字的线路读取数据包。