3

を使用してソケットを作成していますsocket = new Socket(host, port, InetAddress.getLocalHost(), clientPort);。ソケットがクライアント側で特定のポートをリッスンするようにします。しかし、使用するInetAddress.getLocalHost()java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine.

しかし、私が使用するInetAddress.getByName("localhost")と、うまく機能します。しかし、サーバー側でマシンの IP アドレスが必要です。したがって、使用するときはsocket.getInetAddress()、127.0.0.1 ではなく ipadress が必要です。

誰でも助けてください。エクリプスを使用しています。これはファイアウォールの問題でしょうか?

ありがとう

4

2 に答える 2

1

コンストラクターの 4 つの引数の形式を使用しているSocketため (非常に珍しいです。2 つの引数の形式のみを使用し、OS にローカル アドレス側を認識させるのが普通です)、2 つのアドレスが関連付けられていることを確認する必要があります。ソケットに互換性があること、つまり、パケットをそのようにルーティングできること。特に、一方の端が localhost である場合、もう一方の端もローカルホストである必要があります。これは、そのアドレスがループバック ネットワーク インターフェイスを介してのみルーティングされるためです。

(クライアント側での) 最も簡単な修正は、2 つの引数のコンストラクターを使用するように切り替えることです。残りの部分は OS に任せます。それは良い仕事をします。(サーバーが特定のポート番号からのクライアント接続に依存している場合、それはひどく、ひどく壊れやすいです。)

于 2011-11-20T08:49:55.133 に答える
0

クライアント側とサーバー側の責任について混乱しているように聞こえます-Javaソケットを使用して、TCP/IPを介して同じホスト上で2つのJavaアプリケーションが相互に通信しようとしているように聞こえます。

この場合、最初に「サーバー」アプリケーションでServerSocketを使用して、すべてのインターフェースでリスニングソケットを作成する必要があります。

serverSocket = new ServerSocket(4444);

これで、ソケットを使用してローカルホストに接続することにより、「クライアント」アプリケーションからServerSocketに接続できるようになります。

clientSocket = new Socket("localhost", 4444);

次のページは、これを詳細にカバーしているように見えます。

ソケットのすべて

お役に立てば幸いです。

于 2011-11-20T08:32:57.823 に答える