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

时间:2015-04-01 20:01:26

标签: java multithreading sockets

我的客户端/服务器程序出现问题,在连接一个客户端后被阻止。我的一个客户端可以与我的服务器通信,但是当我尝试连接另一个时,第二个客户端无法连接。我从来没有看到我的“好”。在我的控制台上:

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){ }
}

1 个答案:

答案 0 :(得分:0)

将对象流的构造移出构造函数并移入run()方法。该过程意味着与对等方进行I / O,因此不应在accept()线程中执行。