Java套接字中的连接被拒绝错误

Java套接字中的连接被拒绝错误,java,sockets,Java,Sockets,我正在尝试构建一个允许远程PC控制的软件。到目前为止,我的代码能够在客户端和服务器位于同一台PC上时将服务器屏幕共享给客户端,但当我尝试将客户端和服务器保留在不同的笔记本电脑上时,它会显示“连接被拒绝”错误 public static void main(String args[]) throws IOException, ClassNotFoundException { DrawGui(); ServerSocket ss = new ServerSocket(338

我正在尝试构建一个允许远程PC控制的软件。到目前为止,我的代码能够在客户端和服务器位于同一台PC上时将服务器屏幕共享给客户端,但当我尝试将客户端和服务器保留在不同的笔记本电脑上时,它会显示“连接被拒绝”错误

 public static void main(String args[]) throws IOException, 
 ClassNotFoundException {

    DrawGui();
     ServerSocket ss = new ServerSocket(3389);
    //Socket server = ss.accept();
    while(true)
    {
    Socket server = ss.accept();
    new ReceiveScreenshots(server,frame,desktop,inter,panel,label);
    }

}
有人建议我不要让ss.accept()进入while循环。但是如果我将代码更改为以下内容,并将ss.accept()保留在while循环之外,那么我的代码将显示大量错误

 public static void main(String args[]) throws IOException, ClassNotFoundException {

    DrawGui();
     ServerSocket ss = new ServerSocket(3389);
    Socket server = ss.accept();
    while(true)
    {
    //Socket server = ss.accept();
    new ReceiveScreenshots(server,frame,desktop,inter,panel,label);
    }

}
有人能帮我吗?下面是客户端的代码

  public class Test {
 public static void main(String args[]) throws AWTException, IOException
 {
    Socket s = new Socket("localhost",3389);
    Robot robot = null;
    GraphicsEnvironment gen = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice gdev = gen.getDefaultScreenDevice();
    robot = new Robot(gdev);
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    Rectangle rectangle = new Rectangle(dim);
    new Client(s,robot,rectangle);

}
}

public class Client extends Thread {

Socket s;
Rectangle rectangle = null;

Robot robot = null;
ImageIcon previous = new ImageIcon();
public Client(Socket s, Robot robot, Rectangle rectangle) {

    this.s = s;
    this.rectangle = rectangle;
    this.robot = robot;
    start();
}

public void run() {
    ObjectOutputStream ous = null;
    try {
        ous = new ObjectOutputStream(s.getOutputStream());
    } catch (IOException ex) {
        Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
    }
    while (true) {
        BufferedImage bImage = robot.createScreenCapture(rectangle);
        ImageIcon image = new ImageIcon(bImage);
        if(previous.equals(image))
            continue;
        else
        {
        try {
            System.out.println("before sending image");
            ous.writeObject(image);
            System.out.println(" image sent");
            ous.reset();
            System.out.println(" stream reset");
            previous = image;
        } catch (IOException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        }}

}

此处没有可以抛出
连接异常:连接被拒绝的代码,但这意味着在目标IP:端口上没有任何内容正在侦听

谁“建议您将
ss.accept()
循环中排除”,而
循环是由谁提出的?基于什么理由

Socket s = new Socket("localhost",3389);

此代码仅在服务器位于本地主机(错误)中时有效。如果不是,则必须提供其所在的IP地址或主机名,而不是
“localhost”
。当然这是显而易见的?

如果客户端和服务器在不同的主机上运行,您是否确保可以从服务器访问客户端(即转发/打开必要的端口)?@Zachary由于笔记本电脑与同一路由器连接,因此我目前没有使用端口转发。我提供的第二个代码片段显示错误,即使客户端和服务器在同一台PC上。我应该在我的帖子中提到,很抱歉,第二个代码片段会毫不延迟地无限创建新的ReceiveScreenshots对象。第一段之所以有效,是因为ss.accept()在建立连接之前一直阻塞,并在重复自身之前等待另一个连接。我不知道它抛出了什么错误,但这可能是原因。连接被拒绝错误将是因为两台主机无法通信。如果在服务器/客户端位于同一主机上时发生这种情况,则可能是由于提供了错误的地址(地址应为127.0.0.1或localhost)引起的或者这将是客户端服务器中的代码错误。那么,我是否应该在调用ReceiveScreenshots课程之前进行一些延迟呢?由我所在大学的一名完成相同项目的大四学生主持。请详细说明“在目标IP:端口上没有任何内容正在侦听”是什么意思?@TheNoob“连接被拒绝”表示1)客户端正在尝试将套接字连接到一个IP:端口,而该端口上没有正在侦听的服务器套接字;2) 服务器正在侦听,但有太多挂起的连接等待接受;或3)连接被阻止,例如被防火墙阻止。我(相信我,我比你的前辈年长):你能通过发布导致此异常的客户代码来完成你的问题吗?这样我就可以证明你的问题在哪里?@EJP我已经更新了我的问题。请你看一下好吗?@EJP我已经尝试用我要连接的PC的IP替换“localhost”。它仍然不起作用。同时,我还试图通过将accept()从while循环中排除来更新代码,它向我显示了错误。谢谢你解释为什么我不应该把accept排除在循环之外,但是恐怕“拒绝连接”仍然存在