2

ソケットを作成して を取得しInputStreamます。これが私が試した方法です。

try {
    final String serverIP = "111.111.111.111";
    final int serverPort = Integer.parseInt(server_port);
    final InetAddress serverAd=InetAddress.getByName(serverIP);
    final InetAddress localAd =InetAddress.getByName(local_ip);  
    final int localPort = 4040;

    Socket socket = new Socket(serverAd, serverPort, localAd, localPort);  
}  

しかし、スローされる例外があり、

java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:276)
    at shootist.Porter.run(Porter.java:41)

ここで、サーバーは私に rtp データを送信し、サーバー側は問題なく確認されました。私も招待状を送って200枚貰いました。私の IP とポートに問題がある場合、すべての応答が私の IP と指定されたポートに配信されないと思います。しかし、サーバーが私の IP と指定されたポート番号に応答を送信するため、それは起こり得ません。この問題を解決するにはどうすればよいですか? どこが間違っているのですか?

4

2 に答える 2

11

「接続が拒否されました」というエラーは、サーバー マシンのソケット スタックが接続要求を受け取り、意図的にそれを受け入れることを拒否したことを意味します。これは、次の 2 つの理由のいずれかで発生します。

1) 接続しようとしているポートで実行中のリッスン ソケットがありません。

2) リッスンしているソケットがありますが、保留中の接続のバックログがいっぱいであるため、その時点でリクエストをキューに入れる余地がありません。

この 2 つを区別するには、間隔をあけて数回再接続してみてください。一貫して同じエラーが発生する場合は、#1 が原因である可能性があります。ポート番号が正しいことを確認してください。#2 が原因である場合、最終的に再接続が成功する可能性があります。

于 2012-01-11T07:32:18.027 に答える
1

接続が拒否されたということは、そのポートでリッスンしていないサーバーに接続しようとしている、またはバックログが多すぎて接続を受け入れられないことを意味します。

これをテストする簡単な方法は、試すことです

 telnet 111.111.111.111 4040
于 2012-01-11T07:28:27.137 に答える