10

クライアント側のソケットを特定のローカル ポートにバインドしようとしています。このコードでは 20000 を使用しました。

以下のような通常の接続は問題なく動作します。しかし、ローカルポートを選択することはできません。

hostSocket = new Socket(host,80);

だから私はこれを試しました:

hostSocket = new Socket(host, 80, InetAddress.getLocalHost(), 20000);

この:

hostSocket = new Socket();
hostSocket.bind(new InetSocketAddress("localhost", 20000));
hostSocket.connect(new InetSocketAddress(host,80));

しかし、どちらもこの例外を残しています... 2番目のケースでは、接続呼び出しで例外が発生しました。何が欠けているのかよくわかりません。いくつかの指針が欲しいです。

java.net.SocketException: Invalid argument or cannot assign requested address
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
at java.net.Socket.connect(Socket.java:546)
at java.net.Socket.connect(Socket.java:495)
at com.mb.proxy.netflix.NetflixPrefetchingAgent.connect(NetflixPrefetchingAgent.java:98)
at com.mb.proxy.netflix.NetflixPrefetchingAgent.run(NetflixPrefetchingAgent.java:164)
at java.lang.Thread.run(Thread.java:679)
Exception in thread "Thread-19" java.lang.NullPointerException
at com.mb.proxy.netflix.NetflixPrefetchingAgent.prefetchChunk(NetflixPrefetchingAgent.java:272)
at com.mb.proxy.netflix.NetflixPrefetchingAgent.run(NetflixPrefetchingAgent.java:176)
at java.lang.Thread.run(Thread.java:679)
4

2 に答える 2

34

localhost (127.0.0.1) ではなく、マシンの外部 (アウトバウンド) IP アドレスにバインドする必要があります。

以下は問題なく私のボックスで動作します:

Socket s = new Socket();
s.bind(new InetSocketAddress("172.16.1.102", 5000));
s.connect(new InetSocketAddress("google.com", 80));

172.16.1.102私のルーターからDHCP経由でこのボックスに割り当てられたNATされたプライベートネットワークアドレスはどこにありますか.

于 2013-02-05T02:51:12.930 に答える