2017-12-31 37 views
-3

リモートPCの制御を可能にするソフトウェアを構築しようとしています。これまでのところ、クライアントとサーバーの両方が同じPC上にある場合、私のコードはクライアントにサーバー画面を共有できました別のラップトップにクライアントとサーバーを保持しようとすると、「接続が拒否されました」というエラーが表示されます。Javaソケットで接続が拒否されました

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

}

+0

クライアントとサーバーを別々のホストで実行している場合は、サーバーからクライアントに到達できることを確認してください(つまり、必要なポートは転送/オープンされています)。 – Zachary

+0

@ Zachary私は現在、ラップトップが同じルータに接続されているので、ポート転送を使用していません。私が提供している2番目のコードスニペットは、クライアントとサーバーが同じPC上にあってもエラーを表示します。私は私のポストで申し訳ありませんが、ごめんなさい – TheNoob

+0

2番目のものは無制限に新しいReceiveScreenshotsオブジェクトを作成します。最初のセグメントは、ss.accept()が接続されるまでブロックし、それ自体を繰り返す前に別の接続を待つために機能します。私はそれがどんなエラーを投げているのか分からないが、これが原因かもしれない。 – Zachary

答えて

0

のコードはConnectException: connection refusedを投げることができ、ここで何のコードはありませんが、それは何もターゲットIPでリスニングなかったことを意味している:ポート。

あなたはss.accept()whileループの外に保つように勧められましたか?どのような根拠?

​​

このコードは、サーバーがローカルホストにある場合のみ機能します。そうでない場合は、"localhost"ではなく、IPアドレスまたはホスト名を入力する必要があります。確かにこれは明らかですか?

+0

私の大学の上級生は、同じプロジェクトを行っています。 「対象IPで聞いていたことは何もありません」とはどういう意味ですか? – TheNoob

+1

@TheNoob「接続が拒否されました」は、1)クライアントがソケットをIPソケットに接続しようとしていることを意味します。 2)サーバーはリスニングしていますが、受け入れ待ちの保留中の接続が多すぎます。 3)ファイアウォールなどで接続がブロックされている。上級者は間違っています。 –

+1

私はあなた(そして、私を信じて、私は上級者です):この例外が発生したクライアントコードを投稿して質問を完了できますか?あなたの問題がどこにあるかを展示することができますか? – EJP

関連する問題