2015-04-01 54 views
0

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

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

有一个缺失的大括号。我猜测它应该在ThreadClient类的开始之前,除非ThreadClient类被包含在Server类中,在这种情况下,从最后结束的大括号是不存在的。 – 2015-04-01 23:33:26

回答

0

移动对象的建设流式输出构造,进入run()方法。该进程意味着与对等体的I/O,因此它不应该在accept()线程中执行。

+0

我应instanciate当我serv.accept()并给他2个参数对象流?你能告诉我吗?! – gsi 2015-04-02 15:42:13

+0

因为我做到了,它不工作 – gsi 2015-04-02 18:17:56

+0

公共无效的run(){ 尝试 { \t OOS =新的ObjectOutputStream(socket.getOutputStream()); ois = new ObjectInputStream(socket.getInputStream()); \t while(true){} – gsi 2015-04-02 18:22:01

相关问题