始终使用同一端口的多个非同步Java客户机-服务器连接

始终使用同一端口的多个非同步Java客户机-服务器连接,java,sockets,reusability,connection,Java,Sockets,Reusability,Connection,我正在尝试测试一个场景,其中一台服务器每次从一个客户端接受一个连接,在服务器和客户端始终使用相同的端口 其目的是让一个客户端应用程序以大于100/分钟的速率发送少量数据。显而易见的解决方案是在客户端和服务器之间有一个始终连接的链接,但这是生产性的,这需要对已经实现的代码进行更大的更改。在我们今天实施的解决方案中,我们总是有+-1K的连接等待时间,我想摆脱它们 我实现了一个简单的测试仪,代码是: 公共类服务器{ 公共静态无效字符串[]args{ ServerSocket ssock=null; 试

我正在尝试测试一个场景,其中一台服务器每次从一个客户端接受一个连接,在服务器和客户端始终使用相同的端口

其目的是让一个客户端应用程序以大于100/分钟的速率发送少量数据。显而易见的解决方案是在客户端和服务器之间有一个始终连接的链接,但这是生产性的,这需要对已经实现的代码进行更大的更改。在我们今天实施的解决方案中,我们总是有+-1K的连接等待时间,我想摆脱它们

我实现了一个简单的测试仪,代码是:

公共类服务器{ 公共静态无效字符串[]args{ ServerSocket ssock=null; 试一试{ ssock=新服务器套接字; ssock.bindnew inetsocketaddress common.SERVER_端口; }捕捉异常{ e、 打印跟踪; 系统出口-1; } whiletrue{ 试一试{ 套接字cSock=ssock.accept; BufferedReader reader=新BufferedReadernew InputStreamReaderSock.getInputStream; reader.readLine; PrintWriter writer=new printWritersock.getOutputStream; writer.printlncomon.SERVER\u SEND; writer.flush; reader.close; writer.close; cSock.close; }捕获异常e{ System.out.printlne.getClass.getName+:+e.getMessage; } } } } 公共类客户端{ 公共静态无效主字符串[]args引发异常{ InetSocketAddress cliAddr=新的InetSocketAddress InetAddress.getByNameargs[0], Common.CLIENT_端口; InetSocketAddress srvAddr=新的InetSocketAddress InetAddress.getByNameargs[1], Common.SERVER_端口;
forint j=1;j如果你想摆脱TIME_WAIT状态,不要成为接收关闭的对等方。成为启动关闭的对等方。在这种情况下,在读取响应后立即关闭连接,让服务器循环寻找另一个请求,以便它读取EOF,而不是仅仅关闭连接在发送响应后不久。但是,这只会使问题变得更糟,因为所有的等待状态都将在服务器上而不是在客户端累积。另一方面,服务器现在的结构是每个连接都接受多个请求,因此您所要做的就是调整客户端以使用连接池和您的所有问题LEM已经解决。

所以你有很多连接,你想用一大块代码来加速它,但它不起作用,请帮我弄清楚。或者你的问题是关于你的客户端代码似乎找不到服务器这一事实?如果是后者,你应该编辑你的问题,使其显而易见。我只想改进大问题已经实现的代码块…上面的代码只是一个测试应用程序!客户端确实找到、连接并与服务器交换一些消息,但它不像时钟一样工作。我猜这是因为,这两个应用程序无法控制两端连接的关闭,并且所有内容都混淆了。为什么您总是使用同一个客户端端口?这是一个糟糕的做法。我不相信:java.net.noroutetohestException:无法分配请求的地址。我相信这是一个BindException。将TIME_WAIT连接传递到服务器端不是一个选项。在我看来,我必须在客户端和服务器中进行更大的更改…我同意ee这不是一个选项,事实上我是这么说的,但是我所说的其他内容呢?为什么要使用单个客户端端口?你打算什么时候回答这里提出的问题?