2012-02-18 81 views
0

我正在实现一个服务器使用Java ServerSocket并有两个客户端连接,每个来自不同的线程。一个向服务器发送消息,另一个从服务器读取消息。他们都在同一端口上联系服务器,所以我如何区分想要阅读的客户端和想要写入的客户端?Java的serversocket如何写入和读取到不同的线程

ServerSocket ss = new ServerSocket(port); 
while (true) { 
    Socket cs = ss.accept(); 
    BufferedReader r = new BufferedReader(new InputStreamReader(cs.getInputStream())); 
    String message = r.readLine(); 
    System.out.println("message"); 

    DataOutputStream os = new DataOutputStream(cs.getOutputStream()); 
    String send = "send"; 
    os.writeBytes(send); 
} 

最后writeBytes导致自认为相连,以便将消息发送到服务器已经关闭了连接的客户端的问题。同样,希望从服务器接收客户是不会对套接字的输入流提交任何

回答

0

你将不得不使客户端写一个字节或会议开幕表示,如果要阅读后的String或写,你不能真正做到这一点神奇的,如果他们连接到同一个端口,除非你可以通过IP地址或东西区分开来

+0

@ user1190650:换句话说 - 你必须指定和实施特定应用协议... – home 2012-02-18 18:56:43

+0

感谢您的帮助! – user1190650 2012-02-19 03:32:33

0

如果您有连接到相同的端口时,会发生什么多重目的,你必须为连接建立一个协议,以便客户端告诉服务器它是什么类型的客户端,并且服务器的行为是相应的。

对于简单的服务,你可以简单地在客户端写的起始字节告诉它是什么样的客户端,然后服务器相应的行为。对于稍微更高级的协议,可能最容易重用已经存在强健实现的现有协议。

在你目前的情况,该协议是微不足道的,但你可能会很快运行到比较复杂的情况。这里,http上的REST-ful协议很可能是一个很好的选择。

相关问题