【发布时间】:2013-10-12 15:53:00
【问题描述】:
我对网络和使用网络通过编程发送消息非常陌生。无论如何,我有一个客户端和服务器 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;
}
}
【问题讨论】:
-
您正在为发送的每条评论创建一个新连接,因此它将位于不同的端口上。如果您每次使用相同的连接,效率会提高 100 倍,并且每次都使用相同的端口。
-
感谢 Peter 和 neeagl 的快速而有用的回复。他们都很有帮助。
标签: java networking tcp ip port