11

ServerSocketAndroid デバイスを使用してポートでリッスンしようとしています。同じネットワーク上のコンピューターを使用して、WiFi 経由でこのポートに接続できるようにしたいと考えています。

ポートにバインドしても例外は発生しませんが、netstat を確認すると次のように表示されます。

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 (null):4040             (null):*                LISTEN

SocketInetAddressおよびInetAddress.getByName. _ 何も機能していないようです。

同じ WiFi 内のコンピューターからポートに接続しようとすると (netcat と Java の両方を試しましたSocket.connect())、Wireshark で確認できるのは ARP 要求だけです。

Who has [phone's LAN address]? Tell [computer LAN address].

この要求は、タイムアウトになるまで繰り返されます。

コンピューターに ServerSocket を設定し、電話からそのポートに接続するという逆の方法を試しましたが、非常にうまく機能します。

私のテスト用電話は、カスタム ROM を搭載した Samsung Spica i5700 です。

何か案は?

編集: コードは次のように単純です。

ServerSocket server = new ServerSocket();
server.setReuseAddr(true);
server.setTimeout(0);
server.bind(new InetSocketAddress(4040));

Socket client = null;
while((client = server.accept()) == null);
// Connected
enter code here
enter code here
4

3 に答える 3

4

server.bind を使用する代わりに、次のようにサーバー ソケットを初期化してみてください。

また、server.accept() は実際には接続が確立されるまでブロックするため、while ループは必要ありません ( http://download.oracle.com/javase/1.5.0/docs/api/java/を参照)。 net/ServerSocket.html#accept () )

于 2010-11-02T23:29:27.630 に答える
0

を使用してこれを機能させることができました

 ServerSocket server = new ServerSocket( myTcpPort, 0, addr );

ここで、addr = 電話の InetAddress です。それ以外の場合は、localhost (127.0.0.1) にのみバインドされるようです。また、ポート 8080 を使用しています。

于 2011-08-04T13:33:19.983 に答える
0

私もこれに苦労し、次を使用してのみAndroidサーバーに接続できました。

ServerSocket myServerSocket = new ServerSocket();
String hostname = getLocalIpAddress();
myServerSocket.bind(new InetSocketAddress(hostname, myPort));

ホスト名は、このページの getLocalIpAddress() 関数を使用して取得したローカル IP です。

https://github.com/Teaonly/android-eye/blob/master/src/teaonly/droideye/MainActivity.java

于 2013-10-16T14:56:18.217 に答える