繁体   English   中英

Java serversocket如何读写不同的线程

[英]Java serversocket how to write and read to different threads

我正在使用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引起问题,因为为发送消息到服务器而进行连接的客户端已经关闭了连接。 同样,想要从服务器接收的客户端也不会在套接字的输入流上提交任何内容

打开会话后,您将必须让客户端写一个字节或一个字符串,指示它是否要读取或写入,如果它们连接到同一端口,则无法真正做到这一点,除非您可以通过ip地址区分它们或者其他的东西

如果连接到同一端口时发生多种用途,则必须建立连接协议,以便客户端告诉服务器它是哪种客户端,并且服务器的行为也相应。

对于琐碎的协议,您可以简单地让客户端写一个初始字节来告诉它是哪种客户端,然后服务器相应地运行。 对于稍微高级的协议,重用已经存在健壮实现的现有协议可能是最容易的。

在当前情况下,该协议是微不足道的,但是您可能很快就会遇到更复杂的场景。 在HTTP之上的REST-ful协议很可能是一个很好的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM