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