私の質問が正しいかどうかわかりません...@@
(完全なソースコード: https://github.com/oNaiPs/droid-VNC-server )
Windows XP、Eclipse AVD(API レベル 14) で上記リンクのソース コードを実行したところ、サーバーを起動するステップで失敗しました。
デバッグ モードでコードをトレースしているときに、このコードで例外が発生しました
public static boolean isServerRunning() {
try {
byte[] receiveData = new byte[1024];
DatagramSocket clientSocket = new DatagramSocket();
InetAddress addr = InetAddress.getLocalHost();
clientSocket.setSoTimeout(100);
String toSend = "~PING|";
byte[] buffer = toSend.getBytes();
DatagramPacket question = new DatagramPacket(buffer, buffer.length,
addr, 13132);
clientSocket.send(question);
DatagramPacket receivePacket = new DatagramPacket(receiveData,
receiveData.length);
clientSocket.receive(receivePacket);
String receivedString = new String(receivePacket.getData());
receivedString = receivedString.substring(0, receivePacket
.getLength());
return receivedString.equals("~PONG|");
} catch (Exception e) {
return false;
}
}
この行まで実行すると「clientSocket.receive(receivePacket);」
「キャッチ(例外e)」に行きます
変数 e の内容は
e: SocketTimeOutException (id=830027971416)
bytes Transferred 0
+cause ErrorException (id=830029535888)
detailMessage null
+stackState (id=830027970928)
stackTrace null
+suppressedExceptions ArrayList(id=830027971456)
サーバーが時間通りに応答しなかったことによる例外の原因であることがわかりました。 (Class Stacker に感謝します)。したがって、この行「clientSocket.setSoTimeout(100);」にコメントを付けます。長い間待って、まだスタックしていることを確認してください。
AVD を実行するときにデバイスを接続する必要があるのか 、それとも AVD でのみ実行できるのかはわかりません。
変数「clientSocket」を見ると、この行「clientSocket.send(question);」の後に、サブコンテンツの「アドレス」が null になり、「ポート」が -1 になりました。これは正しい結果ですか?(AndroidパッケージのWebサイトでクラスの説明を読みましたが、理解できません。http://developer.android.com/reference/java/net/DatagramSocket.html)