2017-12-31 10 views
-3

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

}

+0

클라이언트와 서버가 다른 호스트에서 실행되는 경우 서버에서 클라이언트에 연결할 수 있는지 확인하십시오 (즉, 필요한 포트가 전달/열려 있음)? – Zachary

+0

@ Zachary 현재 랩톱이 동일한 라우터에 연결되어 있으므로 포트 포워딩을 사용하지 않습니다. 두 번째 코드 스 니펫은 클라이언트와 서버가 동일한 PC에있는 경우에도 오류를 보여줍니다. 나는 내 게시물에 미안하다고 언급 했어야했다. – TheNoob

+0

둘째는 아무런 지연없이 새로운 ReceiveScreenshots Objects를 무한정 생성한다. 첫 번째 세그먼트는 ss.accept()가 연결될 때까지 차단하고 반복하기 전에 다른 연결을 기다리기 때문에 작동합니다. 나는 그것이 어떤 오류를 던지고 있는지 모른다. 그러나 이것은 원인 일 수있다. – Zachary

답변

0

ConnectException: connection refused을 던질 수 여기에는 코드가 없습니다에 대한 코드가 있지만, 그것은 아무것도 대상 IP에서 수신되지 않았 음을 의미 포트입니다.

ss.accept()은 누구입니까? while 회부를 벗어나지 않도록하십시오. 무슨 근거로?

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

이 코드는 서버가 로컬 호스트에있는 경우에만 작동합니다. 그렇지 않은 경우 "localhost" 대신 IP 주소 또는 호스트 이름을 입력해야합니다. 확실히 이것은 명백한 것인가?

+0

내 대학의 수석이면서 같은 프로젝트를 해왔습니다. "대상 IP를 청취하고있는 것이 아무것도 없습니다."포트가 무엇인지 자세히 설명해 주시겠습니까? – TheNoob

+1

@TheNoob "connection refused"는 1) 클라이언트가 적극적으로 수신 대기중인 서버 소켓이없는 IP : 포트에 소켓을 연결하려고 시도하고 있습니다. 2) 서버가 수신 대기 중이지만 수신 대기중인 연결이 너무 많습니다. 또는 3) 방화벽과 같이 연결이 차단되고 있습니다. 그리고 선배는 잘못입니다. –

+1

나에게 (그리고 나를 믿어, 나는 상급생이다.)이 예외가 발생한 클라이언트 코드를 게시하여 질문을 작성해 주시겠습니까? 문제가있는 곳을 전시 할 수 있도록? – EJP

관련 문제