我正在 Java 中实施TFTP (trivial FTP)协议。我有一个客户端和一个服务器,到目前为止,客户端可以请求一个文件,服务器会向他发送该数据。
这是我遇到问题的地方 - 出于明显的测试原因,我在我的机器上运行客户端和服务器。但是,在发送文件时,必须有两个套接字在同一端口上侦听:
...还有两个用于发送数据和确认的套接字,也可以共享一个端口。
这通常发生在同一个端口上,但在不同的机器上。有没有办法解决这个问题,让客户端和服务器在同一台主机上安静地工作,没有任何丑陋的黑客攻击?丑陋的黑客我的意思是:
反复关闭和打开套接字(发送数据,关闭套接字用于发送数据,以便客户端可以使用该端口发送他的ACK等);这也适用于此,但也通过黑客攻击。例如,这是我如何“重新打开”用于发送内容的套接字:
public void open() { try { socket = new DatagramSocket(localPortCache); } catch (SocketException e) { e.printStackTrace(); } }
这是邪恶的。我的套接字最初接收动态分配的短暂端口号。然后我记住这个值并用它来“恢复”我的套接字到旧端口。但是,无法保证该端口仍可用。它通常是,但不能保证。在这种情况下,我是否过于偏执?
我设法解决了我的问题。我的问题是我没有尝试重用我的套接字。例如,我从端口X上的套接字发送了一些东西,但后来尝试在该端口上分配一个新的套接字来监听ACK,而不是仅仅重用旧的套接字。
答案 0 :(得分:0)
客户端不需要使用固定端口号。只需将其绑定为零即可。无论端口号是什么,服务器都应将响应发送回原始客户端。