gpt4 book ai didi

java - Java 中可靠的 TCP/IP

转载 作者:可可西里 更新时间:2023-11-01 02:35:03 24 4
gpt4 key购买 nike

有没有一种方法可以使用 java.net.* 中的 Java TCP/IP 库进行可靠的通信(发送方获知它发送的消息已被接收方接收)?我知道 TCP 相对于 UDP 的优势之一是它的可靠性。然而,我无法在下面的实验中得到这种保证:

我创建了两个类:

1) echo server => 总是发回它接收到的数据。

2) client => 定期向回显服务器发送“Hello world”消息。

它们在不同的计算机上运行(并且运行良好)。在执行过程中,我断开了网络连接(拔下了 LAN 电缆)。断开连接后,服务器仍在等待数据,直到几秒钟过去(最终引发异常)。同样,客户端也一直发送数据,直到几秒钟过去(引发异常)。

问题是,objectOutputStream.writeObject(message) 不能保证消息的传递状态(我希望它会阻塞线程,不断重新发送数据直到传递)。或者至少我得到通知,哪些消息丢失了。

服务器代码:

import java.net.*;
import java.io.*;

import java.io.Serializable;

public class SimpleServer {
public static void main(String args[]) {
try {
ServerSocket serverSocket = new ServerSocket(2002);
Socket socket = new Socket();
socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
ObjectInputStream objectInputStream = new ObjectInputStream(
inputStream);

while (true) {
try {
String message = (String) objectInputStream.readObject();
System.out.println(message);
Thread.sleep(1000);
} catch (Exception ex) {
ex.printStackTrace();
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

客户端代码:

import java.net.*;
import java.io.*;

public class SimpleClient {
public static void main(String args[]) {
try {
String serverIpAddress = "localhost"; //change this

Socket socket = new Socket(serverIpAddress, 2002);
OutputStream outputStream = socket.getOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(
outputStream);

while (true) {
String message = "Hello world!";
objectOutputStream.writeObject(message);

System.out.println(message);
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

最佳答案

如果您需要知道哪些消息已到达对等应用程序,则对等应用程序必须发送确认。

关于java - Java 中可靠的 TCP/IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6939204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com