java - 如何让多个线程使用同一个socket读写?

标签 java multithreading sockets client server

**

将有多个客户端在端口 6069 上向服务器发送消息。我希望同时处理多个请求,但我不确定下面的代码是否可以做到。

套接字的队列中会有请求。由于只有一个线程,它将对一个请求执行迭代,然后从队列中获取下一个请求。如何同时为多个客户提供服务?

**

这是创建线程以监听端口 6069 的类。

public class NetworkModule extends Thread {
  private ServerSocket serverSocket;

  public NetworkModule(int port) throws IOException {

    serverSocket = new ServerSocket(port);
  }

    public void run() {
      while (true) {

                /* Here I read strings from the inputstream and write
                  to outputstream corresponding to "serverSocket" and call
                functions from other classes*/
      }
    }


below is how Main class looks like

public class Main
{

   public static void main(String[] args) 
   {
       try
          {
            int port=6069;
             Thread t = new NetworkModule(port);
             t.start();

          }
       catch(IOException e)
          {
             e.printStackTrace();
          }

   }

}

最佳答案

如果你可以隔离客户端处理方法,比如在一个新的类 ClientHandler 中,它也扩展了 Thread,你在 run() 中阅读和写入流。然后在 NetworkModulerun() 中:

while (true) {
     Socket socket = serverSocket.accept(); // blocks until new client connects
     ClientHandler handler = new ClientHandler(socket); // pass reference to socket
     handler.start(); // start executing in new thread
}

通常,实现 Runnable 而不是 extending Thread 更好,因为由于 Java 继承模型,您可以实现许多接口(interface)但只能从单个类扩展。

关于java - 如何让多个线程使用同一个socket读写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30149214/

相关文章:

multithreading - CreateRemoteThread 32->64 和/或 64->32

python - 学习 Python 线程模块

c# - TCP Socket中SocketError.ConnectionReset的可能原因有哪些

python - Python:套接字未读取字节输入

java - 在锁定 lock 之后但在 try-finally 之前可能出现异常

java - 计算按钮点击次数

java - java 中的管道 I/O 流

java - Java中通过链表进行递归

c++ - 有效地将参数传递给 C++ 中另一个线程中的函数

c# - 确定多播套接字数据的发送者