gpt4 book ai didi

java - 在通过 Socket 接收数据时设置超时

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:55:54 28 4
gpt4 key购买 nike

我有一个在 Java 中通过 Socket 类发送数据的函数。当我发送数据时,我需要接收一些数据。问题是如何在 2 秒内设置等待数据的超时时间(如果我在 2 秒内没有收到数据,我需要了解发生了通信错误并显示消息)。这是我的代码,有什么帮助吗?

    public boolean SendMonitorMessage(
final MonitorRequestRepeatMessageTCP message) {
boolean result = true;
System.out
.println("****************** SEND MONITOR REQUEST REPEAT MESSAGE TCP **********************************");

// new Thread() {
// public void run() {
int prevService=message.GetService();
synchronized (socket) {
try {
System.out.println("IPADDRESS=" + ipAddress);
System.out.println("PORT=" + port);
System.out.println("Is reachable=" + Ping());
message.PrintMessage(message.toBytes());

OutputStream socketOutputStream = (OutputStream) socket
.getOutputStream();
socketOutputStream.write(message.toBytes());

InputStream socketInputStream = (InputStream) socket
.getInputStream();

byte[] buffer = new byte[256];
List<byte[]> received = new LinkedList<byte[]>();
int numberReceived;
byte[] tempBuffer;

while ((numberReceived = socketInputStream.read(buffer)) != -1) {
tempBuffer = new byte[numberReceived];
ByteBuffer baferce = ByteBuffer.wrap(tempBuffer);
baferce.put(buffer, 0, numberReceived);
received.add(tempBuffer);
}

if (received.size()>0){
new MonitorResponseMessageTCP(received, message.GetMonitorVariablesArrayList(), prevService);
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return true;
}

最佳答案

参见 SocketServerSocket .这两个类都有一个 setSoTimeout 方法来指定等待连接或等待接收数据时等待的最长时间。当该时间过去时,套接字将抛出一个 SocketTimeoutException,您可以使用错误消息或任何您想要的方式处理它。

在执行您想要超时的操作之前,您必须调用 setSoTimeout

之前

while ((numberReceived = socketInputStream.read(buffer)) != -1) {

你需要打电话

socket.setSoTimeout(2000);

然后将 catch(SocketTimeoutException) 部分添加到您已有的 try/catch block 中。

关于java - 在通过 Socket 接收数据时设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4992191/

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