2011-11-12 4 views
0

Je suis en train d'implémenter un socket en Java pour communiquer avec VMware-Workstation (Version: 8.0.0 build-471780).Problème dans la socket communicante et le talon VMware-Workstation

Je crée le socket avec: Socket socket = new Socket("localhost",8832);, puisque j'exécute la machine virtuelle localement et que 8832 est le port que VMware écoute pour le débogage par defalut. La connexion n'est pas refusée ni aucune exception. Cependant, je suis en difficulté pour établir une communication entre mon processus et le talon de VMware.

Ces méthodes ne sont pas efficacement ou envoyaient recevoir quoi que ce soit du talon:

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

La deuxième méthode ne se termine jamais, car il est un appel de blocage. Lorsque j'arrête le processus Java, ma machine virtuelle remarque la perte de la connexion du débogueur. Je peux donc dire que la connexion a été établie avec succès.

Quelqu'un peut-il m'aider ici? Je ne sais plus quoi faire.

Répondre

0

Pouvez-vous essayer d'exécuter le programme dans le même système, sans utiliser la machine virtuelle?

Ce n'est pas enregistrer pour ignorer la valeur de retour de read car il peut ne pas lire toute la longueur. Votre application pourrait se bloquer si vous prévoyez recevoir le même nombre de "messages" que vous envoyez. C'est parce qu'un Socket est un flux d'octets et que vous pouvez combiner ou diviser un nombre quelconque de chaînes envoyées.

Une approche plus sûre est d'utiliser DataOutput/InputStreams

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

Malheureusement, je ne peux pas exécuter le programme en dehors de la machine virtuelle. J'ai essayé comme tu l'as dit, mais ça dépend de la méthode 'getStr()'. Il arrive probablement quelque chose de similaire à 'sendStr()', mais seulement 'getStr()' bloque, donc je me bloque juste là. – onurbruno

+0

Pouvez-vous courir à l'intérieur de la machine virtuelle alors? Si getStr se bloque, c'est parce que l'expéditeur n'envoie pas. Je voudrais ajouter un message de journal avant et après le writeUTF() pour voir s'il envoie. –

+0

Vous avez raison, il n'envoie pas aussi! Le problème ne semble pas être lié à la connexion, puisque le fichier vmware.log dit: "Debug stub remote connection accepted" – onurbruno