リモート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);
}}
}
クライアントとサーバーを別々のホストで実行している場合は、サーバーからクライアントに到達できることを確認してください(つまり、必要なポートは転送/オープンされています)。 – Zachary
@ Zachary私は現在、ラップトップが同じルータに接続されているので、ポート転送を使用していません。私が提供している2番目のコードスニペットは、クライアントとサーバーが同じPC上にあってもエラーを表示します。私は私のポストで申し訳ありませんが、ごめんなさい – TheNoob
2番目のものは無制限に新しいReceiveScreenshotsオブジェクトを作成します。最初のセグメントは、ss.accept()が接続されるまでブロックし、それ自体を繰り返す前に別の接続を待つために機能します。私はそれがどんなエラーを投げているのか分からないが、これが原因かもしれない。 – Zachary