원격 PC 제어를 허용하는 소프트웨어를 작성하려고합니다. 클라이언트와 서버가 동일한 PC에있을 때까지 지금까지 내 코드가 클라이언트에 서버 화면을 공유 할 수있었습니다. 하지만 다른 랩톱에 클라이언트와 서버를 유지하려고하면 "Connection refused"오류가 표시됩니다.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);
}
}
while 루프에서 ss.accept()를 제거하는 것이 좋습니다. 그러나 코드를 다음과 같이 변경하고 while 루프에서 ss.accept()를 유지하면 코드에 여러 가지 오류가 표시됩니다.
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 현재 랩톱이 동일한 라우터에 연결되어 있으므로 포트 포워딩을 사용하지 않습니다. 두 번째 코드 스 니펫은 클라이언트와 서버가 동일한 PC에있는 경우에도 오류를 보여줍니다. 나는 내 게시물에 미안하다고 언급 했어야했다. – TheNoob
둘째는 아무런 지연없이 새로운 ReceiveScreenshots Objects를 무한정 생성한다. 첫 번째 세그먼트는 ss.accept()가 연결될 때까지 차단하고 반복하기 전에 다른 연결을 기다리기 때문에 작동합니다. 나는 그것이 어떤 오류를 던지고 있는지 모른다. 그러나 이것은 원인 일 수있다. – Zachary