我正在运行Oracles 站点上的标准 Java 网络示例 ,它运行一个简单的敲门笑话程序。这会创建标准套接字,我认为这是 TCP 连接(或者我在这里错了吗?)。
令我困惑的是,当我在TCPView中查看端口时,看到的是端口 4444 显示了多行(我们使用 Knock-Knock 程序连接的那个)。这是屏幕截图(此处为完整图像):
为什么它同时显示 UDP 和 TCP ?它不应该只是 TCP 吗?
那里有两个不同的过程。有没有机会运行 udp 演示的陈旧进程?
示例代码中没有任何内容在端口 4444 上使用UDP。您的 TCPView 还显示它是另一个使用UDP端口的进程(不同的 PID):
此外,当我运行示例代码时,我只看到TCP记录:
我的猜测是您可能有另一个使用 DatagramSocket 运行的示例?!您可以通过将示例代码更改为使用不同的端口来验证示例代码不是使用UDP端口的代码。例如,尝试在KnockKnockServer中将端口更改为 5555 :
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(5555);
} catch (IOException e) {
System.err.println("Could not listen on port: 5555.");
System.exit(1);
}
在KnockKnockClient中:
try {
kkSocket = new Socket("localhost", 5555);
out = new PrintWriter(kkSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
看看你在这个端口上是否有任何UDP记录。