2017-12-31 30 views
-3

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); 
     }} 

}

+0

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

+0

@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

+0

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

Antwort

0

Es gibt hier keinen Code, die ConnectException: connection refused werfen kann, aber es bedeutet, dass nichts an dem Ziel-IP-zuhörte: port.

Sie wurden 'empfohlen, ss.accept() aus der while Schleife zu halten' von wem? Aus welchen Gründen?

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

Dieser Code funktioniert nur, wenn der Server in ist, err, der lokale Host. Ist dies nicht der Fall, müssen Sie anstelle von "localhost" die IP-Adresse oder den Hostnamen angeben. Sicherlich ist das offensichtlich?

+0

Von einem Senior in meiner Universität, der das gleiche Projekt gemacht hat. Könnten Sie bitte erläutern, was "nichts an der Ziel-IP hörte: Port" bedeutet? – TheNoob

+1

@TheNoob "Verbindung abgelehnt" bedeutet entweder 1) der Client versucht, einen Socket an eine IP anzuschließen: Port, an dem kein Server-Socket aktiv zuhört; 2) der Server hört zu, hat aber zu viele ausstehende Verbindungen, die auf Akzeptanz warten; oder 3) die Verbindung wird blockiert, beispielsweise durch eine Firewall. Und der Senior ist falsch. –

+1

Von mir (und vertrauen Sie mir, ich bin älter als Ihr Senior): Könnten Sie bitte Ihre Frage ausfüllen, indem Sie den Kundencode veröffentlichen, der diese Ausnahme verursacht? Damit ich zeigen kann, wo dein Problem liegt? – EJP

Verwandte Themen