2011-11-12 3 views
0

VMware-Workstation (버전 : 8.0.0 build-471780)과 통신하기 위해 Java 소켓을 구현 중입니다.소켓 및 VMware-Workstation 스터브 통신 문제

로컬 컴퓨터에서 가상 컴퓨터를 실행하고 있기 때문에 으로 소켓을 만들고 8832는 defalut에서 디버깅을 수신 대기하는 포트입니다. 연결이 거부되거나 어떤 종류의 예외가 발생하지 않습니다. 그러나 내 프로세스와 VMware Stub 사이의 통신을 설정하는 데 어려움이 있습니다.

이러한 방법을 효과적으로 보내거나 스텁에서 아무것도 수신되지 않습니다이 차단 호출이기 때문에

public void sendStr(String str) throws IOException { 
     out.write(str.getBytes()); 
} 
public String getStr() throws IOException, ClassNotFoundException {//blocking call 
    byte[] byteArray = new byte[40]; 
    in.read(byteArray); 
    return new String(byteArray); 
} 

두 번째 방법은, 끝나지 않아.

Java 프로세스를 종료하면 가상 컴퓨터가 디버거 연결이 끊어진 것을 알 수 있으므로 연결이 성공적으로 완료되었다고 말할 수 있습니다.

누군가 나를 도와 줄 수 있습니까? 나는 이제 무엇을해야 할지를 모른다.

답변

0

가상 시스템을 사용하지 않고 동일한 시스템에서 프로그램을 실행해볼 수 있습니까?

전체 길이를 읽을 수 없으므로 read의 반환 값을 무시하지 마십시오. 귀하가 보낸 것과 동일한 수의 "메시지"를 받기를 원하면 응용 프로그램이 멈출 수 있습니다. 이는 소켓이 바이트 스트림이기 때문에 여러 개의 전송 된 문자열을 결합하거나 분리 할 수 ​​있기 때문입니다.

더 안전한 방법은 DataOutput 인터페이스 /에는 InputStream가

final DataOutputStream out = 

public void sendStr(String str) throws IOException { 
    out.writeUTF(str); 
} 

final DataInputStream in = 

public String getStr() throws IOException {//blocking call 
    return in.readUTF(); // will return exactly on string. 
} 
+0

불행하게도, 나는 가상 머신 외부 프로그램을 실행할 수 없습니다 사용하는 것입니다. 내가 말한 방식대로 시도했지만 'getStr()'메서드가 멈춘다. 아마도 'sendStr()'에서 비슷한 것을 상상할 수 있지만 'getStr()'만 블로킹하기 때문에 그냥 멈추게됩니다. – onurbruno

+0

가상 머신 내부에서 실행할 수 있습니까? 송신자가 송신하지 않기 때문에 getStr이 중단됩니다. writeUTF() 전후에 로그 메시지를 추가하여 전송 중인지 확인합니다. –

+0

당신 말이 맞아요, 또한 보내지 않습니다! vmware.log 파일에 "Debug stub remote connection accepted"가 표시되어 문제가 연결과 관련이없는 것 같습니다. – onurbruno