Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 服务器和客户端之间的多个套接字_Java_Sockets - Fatal编程技术网

Java 服务器和客户端之间的多个套接字

Java 服务器和客户端之间的多个套接字,java,sockets,Java,Sockets,我有一个java服务器应用程序,它通过SocketChannel与多个客户端通信。在这个通道上,客户端发送一个请求,服务器发送一个应答。现在我想添加服务器可以向客户端发送文件的功能。我不想通过我用于通信的套接字发送它,所以在一个客户端和一个服务器之间有更多的套接字是个好主意吗?如果是,如何处理?我用过这样的东西吗 SocketChannel socket = serverSocket.accept() if(!addressSet.contains(socket.address)) {

我有一个java服务器应用程序,它通过
SocketChannel
与多个客户端通信。在这个通道上,客户端发送一个请求,服务器发送一个应答。现在我想添加服务器可以向客户端发送文件的功能。我不想通过我用于通信的套接字发送它,所以在一个客户端和一个服务器之间有更多的套接字是个好主意吗?如果是,如何处理?我用过这样的东西吗

SocketChannel socket = serverSocket.accept()
if(!addressSet.contains(socket.address)) {
    it is comunicate socket
}
else {
    it is date transfer socket
}
还是有更好的办法?

是的,有更好的办法。
使用
ServerSocketChannel
和方法
public abstract SocketChannel accept()抛出IOException

在接受客户端连接后,在随机端口上创建一个新的ServerSocket,然后告诉他端口号。然后,他应该将其连接为数据连接。然后,让服务器接受来自它的一个连接,最好是来自他,然后关闭那个ServerSocket。它不是万无一失的,但相当强大。

您必须使用与客户端连接的同一个套接字。无论是数据传输套接字还是通讯器套接字。但如果一个客户端创建两个套接字,它会工作吗?我会选择使用哪一个来发送消息或数据。另一方面,我意识到我不能100%确定两个具有相同IP的套接字来自同一个客户端(它可以是路由器和两个不同的客户端)“然后,让服务器接受来自它的一个连接,最好是来自他”我有点晚了,但我如何检查它是否是同一个客户端?