简体   繁体   English

Java套接字仅适用于一个客户端,在服务器接受后被阻止

[英]Java socket works only for one client, blocked after server accept

I have a problem with my client/server program, which is blocked after one client is connected. 我的客户端/服务器程序有问题,连接一个客户端后该程序被阻止。 My one client can communicate with my server, but when I try to connect another, the second can't connect. 我的一个客户端可以与我的服务器通信,但是当我尝试连接另一个客户端时,第二个客户端无法连接。 I never see my 'ok' on my console: 我从没在控制台上看到过“ ok”:

public class Server{
  private Map<Integer,ThreadClient > mapThreads;
  private ServerSocket serveur ;

  public static void main(String args[])
  {
    try{
      Serveur serv = new Server();
      serv.setServer( new ServerSocket(4786,2));

      while (true)
      {
        serv.getMapThreads().put(new ThreadClient(serv.getServer().accept(),serv);
        System.out.println("ok");
      }
    }
    catch (Exception e) { }
  }

class ThreadClient implements Runnable
{
  private Thread t;
  private Socket socket;
  private ObjectOutputStream oos ;
  private ObjectInputStream ois;
  private Serveur server;

  public ThreadClient(Socket s, Server serv ) throws ClassNotFoundException
  {
    server = serv;
    socket=s;
    try{
      oos = new ObjectOutputStream(socket.getOutputStream());
      ois = new ObjectInputStream(socket.getInputStream());
    }
    catch (IOException e){ }

    t = new Thread(this);
    t.start();
  }

  public void run()
  {
    try
    {
      while(true){
        // send and recev message
      }
    }
  }
  catch (Exception e){ }
}

Move the construction of the object streams out of the constructor and into the run() method. 将对象流的构造移出构造函数,并移到run()方法中。 The process implies I/O with the peer so it shouldn't be carried out in the accept() thread. 该过程暗示与对等方进行I / O,因此不应在accept()线程中进行。

暂无
暂无

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

相关问题 Java服务器将仅接受来自我的客户端的一项 - Java server would accept only one entry from my client Socket C客户端和Java服务器只能发送一个String - Socket C client and Java server can send only one String Java Server套接字卡在接受调用上(Android客户端,Java Server) - Java Server socket stuck on accept call (Android Client, Java Server) Java客户端服务器多线程,仅适用于一个连接 - java client server multithreaded, works for only one connection 具有多个客户端的Java rmi服务器-一次仅接受一个客户端调用 - Java rmi server with multiple client - Only accept one client call at the time Java中的套接字服务器,最后连接的客户端是唯一可以读取套接字的 - Socket server in Java, The last client connected is the only can read the socket Java Socket客户端/服务器对一次只能发送一条消息 - Java Socket client/server pair can only send one message at a time Java Socket Server和C#客户端Localhost可以工作 - Java Socket Server and C# Client Localhost works 简单的 Java 客户端和服务器套接字设置在一次迭代后中断消息循环 - Simple Java client and server socket setup breaks message loop after one iteration 使用DataOutputStream向Server Socket写消息到Client Socket的消息仅在关闭Client Socket后才发送,为什么? - Writing messages to client socket using DataOutputStream to Server Socket only sent after closing the Client Socket why?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM