1

私は、ネットワーキングとネットワークを使用してプログラミングを通じてメッセージを送信することに非常に慣れていません。とにかく、私はクライアントとサーバーのJavaコマンドラインアプリケーションを持っています(サーバーはブリッジネットワークアダプターを備えた同じマシン上のVMで実行されており、ホストからゲストへのpingは機能し、その逆も同様です)、サーバー側ではそれぞれ受信したメッセージは別のポートから来ています。これは正常な動作ですか?マシンが使用するポートを使い果たすとどうなりますか? Java のライブラリは、処理が完了した後、ポートをインテリジェントに閉じますか?

基本的に、これは問題でもありますか?もしそうなら、どうすれば修正できますか?サーバーからの出力と、次に示すクライアントのコード

いくつかのメッセージを送信した後のサーバー出力:

Received (/192.168.1.122:59628): shsfh

Received (/192.168.1.122:59629): dfsh

Received (/192.168.1.122:59631): dfh

Received (/192.168.1.122:59632): fdshdf

Received (/192.168.1.122:59633): shf

Received (/192.168.1.122:59637): fgfggsdfhsfdh

Received (/192.168.1.122:59638): fdshf

Received (/192.168.1.122:59639): hs

Received (/192.168.1.122:59640): hfh

これらのメッセージを送信したクライアントのコード:

import java.io.*;
import java.util.*;
import java.net.*;
class TCPClient
{
  public static void main(String argv[]) throws Exception
  {   Scanner scan = new Scanner(System.in);
       while (true)
       {
          String msgcont = scan.nextLine();
          System.out.println(tcpSend("192.168.1.153", 6789, 5000, msgcont));
       }
   }

public static String tcpSend(String ip, int port, int timeout, String content)
{
     String ipaddress = ip;
     int portnumber = port;
     String sentence;
     String modifiedSentence;
     Socket clientSocket;
     try
     {
         clientSocket = new Socket(ipaddress, portnumber);
         DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
         BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
         outToServer.writeBytes(content + '\n');
         clientSocket.setSoTimeout(timeout);
         modifiedSentence = inFromServer.readLine();
         clientSocket.close();
             outToServer.close();
         inFromServer.close();
     }
     catch (Exception exc)
     {
          modifiedSentence = "";
     }
          return modifiedSentence;
}
}
4

1 に答える 1

1

はい、他のホストへのソケットを開くたびに、マシンの残りのポートのいずれかから接続を開始できます。OS は次に利用可能なポートを選択し、接続を確立します。

65536 の開いているポートが利用可能で、最初の 1 ~ 1024 ポートがシステムによって予約されています。

于 2013-10-05T19:19:30.137 に答える