在评论正确使用SO_REUSEADDR后编辑
我想在java中为入站和出站连接使用相同的端口
目的是在分布式环境中创建节点 . 但在Tcp中,我需要使用两个不同的端口来接受和启动连接 .
// accept incoming connection on one port
ServerSocket.accept()
// connect to remote, the port used will be different from the one used for accepting
Socket.connect()
现在的问题是:
A开始侦听端口a . B上的B和c上的C.
当A连接B(使用 Socket.connect() )时,A&B将保持套接字打开以便将来传递消息 .
B仍然不知道端口A正在侦听,因为b接收连接的端口与a不同 .
当C连接B时,B给出A到C的套接字地址,但该端口是由 Socket() 实例绑定的,该实例没有 accept() 方法
当然,A可以通知B关于它正在收听的端口,但是没有直接的方法吗?
我怎样才能通过这个测试?
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.con