服务器套接字赢了';Java中的t accept()本地应用程序握手

服务器套接字赢了';Java中的t accept()本地应用程序握手,java,sockets,Java,Sockets,我正在尝试通过pc上的端口8000脱机将客户端应用程序连接到我的代码。我正在使用ServerSocket库使用以下代码进行连接。客户端的应用程序通过端口发送XML消息,我需要连接、解释和响应。(请记住,在阅读以下内容时,我尚未编码解释/回复) 每次我尝试从客户机应用程序发送消息(在eclipse中运行调试功能时),代码都会到达serverSocket.accept()方法,该方法应该是客户机和服务器之间的“握手”,不能再进一步了。显然,我无法更改客户端应用程序,因此需要找出它不接受连接的原因 p

我正在尝试通过pc上的端口8000脱机将客户端应用程序连接到我的代码。我正在使用ServerSocket库使用以下代码进行连接。客户端的应用程序通过端口发送XML消息,我需要连接、解释和响应。(请记住,在阅读以下内容时,我尚未编码解释/回复)

每次我尝试从客户机应用程序发送消息(在eclipse中运行调试功能时),代码都会到达serverSocket.accept()方法,该方法应该是客户机和服务器之间的“握手”,不能再进一步了。显然,我无法更改客户端应用程序,因此需要找出它不接受连接的原因

package connect;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class PortListener2 {
    public static void main(String[] args){
            System.out.println("> Start");

        int portNumber = 8000;
        try (
            ServerSocket serverSocket =
                new ServerSocket(portNumber);
            Socket clientSocket = serverSocket.accept();     
            PrintWriter out =
                new PrintWriter(clientSocket.getOutputStream(), true);                   
            BufferedReader in = new BufferedReader(
                new InputStreamReader(clientSocket.getInputStream()));
        ) {
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
            System.out.println("Received: "+inputLine);
                out.println(inputLine);
                if (inputLine.equals("exit")){
                    break;
                }
            }
        } catch (Exception e) {
            System.out.println("Exception caught when trying to listen on port "
                + portNumber + " or listening for a connection");
            System.out.println(e.getMessage());
            e.printStackTrace();
        } finally {
            System.out.println("Disconnected");
        }
    }
}

您是否尝试过从客户端计算机对服务器8000进行远程登录?它有响应吗?您如何知道客户端是否能够向服务器发送连接请求?我的意思是,在accept()循环中等待可能意味着没有可连接的客户端。您发布的代码没有问题。它将阻塞
accept()
,因为
accept()
就是这样做的;它等待客户端连接。如果是这样的话,我会说你的网络/防火墙出现了问题,阻止了客户端的连接,否则你的监听端口就错了。完成后,您需要关闭已接受的套接字。我正在侦听正确的端口。我知道这一点,因为我的机器上有客户机应用程序,我正在控制它。据我所知,我也在关闭套接字,try(x){}使用x作为局部变量尝试{}块,然后关闭它们?布莱恩:我现在正在尝试你的建议,我一直在想同样的事情,但是禁用防火墙不起作用。我现在正在一个没有防火墙的虚拟机上尝试这个程序(它是根据需要设置的)。感谢所有到目前为止的回复!