Ich versuche, eine Software zu bauen, die Remote-PC-Kontrolle ermöglicht. Mein Code war bisher in der Lage, den Server-Bildschirm zum Client zu teilen, wenn der Client und der Server auf dem gleichen PC sind aber es zeigt den Fehler "Verbindung abgelehnt", wenn ich versuche, die Clients und Server in verschiedenen Laptops zu halten.Verbindung abgelehnt Fehler in Java-Socket
Ich wurde geraten, ss.accept() außerhalb der while-Schleife zu halten. Aber wenn ich meinen Code in den folgenden ändern und die ss.accept() aus der while-Schleife heraushalte, zeigt mein Code zahlreiche Fehler.
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);
}
}
Kann mir bitte jemand helfen? Unten ist der Code für den Client
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);
}}
}
Wenn der Client und der Server auf verschiedenen Hosts ausgeführt werden, haben Sie sichergestellt, dass Sie den Client vom Server aus erreichen können (dh die erforderlichen Ports sind weitergeleitet/geöffnet)? – Zachary
@Zachary Ich verwende derzeit keine Portweiterleitung, da die Laptops mit demselben Router verbunden sind. Das zweite Code-Snippet, das ich zur Verfügung gestellt habe, zeigt Fehler, selbst wenn der Client und der Server sich auf demselben PC befinden. Ich hätte das in meinem Beitrag erwähnen sollen, sorry – TheNoob
Der zweite erstellt unendlich neue ReceiveScreenshots-Objekte ohne Verzögerung. Das erste Segment funktioniert, weil ss.accept() blockiert, bis eine Verbindung hergestellt wird, und auf eine andere Verbindung wartet, bevor es sich selbst wiederholt. Ich weiß nicht, welchen Fehler es wirft, aber das mag die Ursache sein. – Zachary