连接到服务器时客户端套接字超时

Posted

技术标签:

【中文标题】连接到服务器时客户端套接字超时【英文标题】:Client socket times out when connecting to Server 【发布时间】:2013-11-30 11:21:53 【问题描述】:

当我尝试使用套接字将物理设备连接到服务器时遇到问题。在服务器端,它似乎不接受任何连接,而在客户端,套接字超时。任何想法为什么会发生这种情况?

我在下面提供我的代码

服务器代码:

public void run()
    
        // TODO Auto-generated method stub
        try
        gamePending = false;
        pid = 0;
        while(pid < 2)
            System.out.println("Hello from run loop on game");
            Socket tempSocket = server.accept();
            System.out.println("Client connected at " + tempSocket.getLocalPort());
            PrintWriter tempWriter = new PrintWriter(new BufferedWriter (new OutputStreamWriter(tempSocket.getOutputStream())),true);
            tempWriter.println("" + pid);

            players[pid] = new Client(tempSocket, pid, this);
            players[pid].start();
            gamePending = true;
            if(pid == 0)sendMsg(pid, "waiting for other player");
            pid++;
        
        
        catch(Exception e)
            System.out.println("There has been an Error. Game will be Terminated.");
        
        //Start new game for the next two players...
        new Game();
    

客户端:

public void run() 
    // Connects to the Server....
    try 
        socket = new Socket("192.168.1.116", 9090);
     catch (UnknownHostException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
     catch (IOException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    

    try 
        in = new BufferedReader (new InputStreamReader(socket.getInputStream()));
     catch (IOException e1) 
        // TODO Auto-generated catch block
        e1.printStackTrace();
    
    try 
        out = new PrintWriter(socket.getOutputStream(),true);
     catch (IOException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    

11-16 23:32:11.016:W/System.err(24213):java.net.ConnectException:无法连接到 /192.168.1.116(端口 9090):连接失败:ETIMEDOUT(连接超时) 11-16 23:32:11.016: W/System.err(24213): 在 libcore.io.IoBridge.connect(IoBridge.java:114) 11-16 23:32:11.016: W/System.err(24213): 在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 11-16 23:32:11.026: W/System.err(24213): 在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 11-16 23:32:11.026: W/System.err(24213): 在 java.net.Socket.connect(Socket.java:842) 11-16 23:32:11.026: W/System.err(24213): at vatos.locos.spheroknockout.Connection.run(Connection.java:22) 11-16 23:32:11.026: W/System.err(24213): 在 java.lang.Thread.run(Thread.java:841) 11-16 23:32:11.026:W/System.err(24213):原因:libcore.io.ErrnoException:连接失败:ETIMEDOUT(连接超时)

【问题讨论】:

尝试从客户端远程登录到您的服务器 IP/端口。它连接了吗? 【参考方案1】:

我不能确定(因为它没有出现在您的代码中),但我认为服务器没有在同一个端口 (9090) 上进行冲洗。这可能是主要问题,但服务器或客户端也可能被防火墙阻止(即使它们在同一台机器上运行)。

【讨论】:

以上是关于连接到服务器时客户端套接字超时的主要内容,如果未能解决你的问题,请参考以下文章

当我将多个客户端同时连接到 Java 服务器时,套接字写入错误

nodejs websocket检测断开连接的套接字

连接到 redis 时,Unix 套接字比 tcp 慢

连接到服务器时 WSAECONNREFUSED

客户端连接到服务器应用程序时看不到更新的数据

无法在java中的2台PC套接字之间将客户端连接到服务器