1

あるJavaプログラムから別のJavaプログラムにintを送信します(同じコンピューター上でその分)。ただし、例外が発生し、接続されない場合があります。

スレッド「main」の例外java.net.ConnectException:接続が拒否されました:java.net.PlainSocketImpl.socketConnect(ネイティブメソッド)のjava.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)のjava.net.PlainSocketImplで接続します。 connectToAddress(PlainSocketImpl.java:195)at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)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。(Socket.java:375)at java.net.Socket。(Socket.java:189)at Client.main (Client.java:6)

送信するためのコードは次のとおりです。

        Socket socket = new Socket("localhost" , 8080);
    DataOutputStream out = new DataOutputStream(socket.getOutputStream());
    out.writeInt(5);
    socket.close();

そして受け取るために:

    ServerSocket serverSocket = new ServerSocket(8080);
    Socket socket = serverSocket.accept();

    DataInputStream din = new DataInputStream(socket.getInputStream());
    System.out.println(din.readInt());
            socket.close();

うまくいくこともあればうまくいかないこともあるので、それは奇妙なことです。誰かがその理由について何か考えを持っていますか?

4

2 に答える 2

1

例外の説明からの引用:

「ソケットをリモートアドレスおよびポートに接続しようとしたときにエラーが発生したことを示します。通常、接続はリモートで拒否されました(たとえば、リモートアドレス/ポートでリッスンしているプロセスがありません)。」

ほとんどの場合、ポートをリッスンしているものはありません。サーバーコードは1つの接続を受け入れてからシャットダウンするように見えるため、接続ごとにサーバーを再起動しない限り、これが原因である可能性があります。そうでない場合は、サーバーアプリが実行されていることを確認してください。

于 2011-03-15T15:23:33.260 に答える
1

次の場合は、このエラーが発生するはずです。

  1. サーバーを起動します
  2. クライアントを起動します
  3. サーバーを再起動せずに、クライアントを再起動します

サーバーは1つの接続のみを受け入れてから、終了します。

無制限の数の順次接続を受け入れる場合は、次のようなループでサーバーコードを囲みます。

ServerSocket serverSocket = new ServerSocket(8080);
while (true) {
  Socket socket = serverSocket.accept();
  DataInputStream din = new DataInputStream(socket.getInputStream());      
  System.out.println(din.readInt());              
  socket.close();
}

リクエストを処理した後、別のリクエストを再度リッスンするか、待機中のリクエストを受け取ります。

于 2011-03-15T15:41:10.540 に答える