私は、ネットワーキングとネットワークを使用してプログラミングを通じてメッセージを送信することに非常に慣れていません。とにかく、私はクライアントとサーバーの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;
}
}