ソケットを作成できません:java.net.connectexception:接続拒否:接続
-
26-10-2019 - |
質問
ソケットを作成して取得します 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への応答を送信して指定されたポート番号を送信するため、それは起こり得ません。この問題を修正するにはどうすればよいですか?私はどこで間違っていて、何?
解決
「接続が拒否された」エラーは、サーバーマシンのソケットスタックが接続要求を受信し、意図的に受け入れることを拒否したことを意味します。それは2つの可能な理由のいずれかで起こります:
1)接続しようとしているポートで実行されているリスニングソケットはありません。
2)リスニングソケットがありますが、保留中の接続のバックログはいっぱいであるため、その瞬間にリクエストをキューする余地はありません。
2つを区別するには、各試行の間に遅延して数回再接続してみてください。一貫して同じエラーが発生した場合、#1が犯人である可能性があります。ポート番号が正しいことを確認してください。 #2が犯人の場合、再接続は最終的に成功する可能性があります。
他のヒント
接続が拒否され、そのポートで聞いていないサーバーに接続しようとするか、接続を受け入れるにはバックログが大きすぎることを意味します。
これをテストする簡単な方法は、試すことです
telnet 111.111.111.111 4040
所属していません StackOverflow