gpt4 book ai didi

java - DataOutputStream.write(byte b[], int off, int len) 不抛出异常

转载 作者:行者123 更新时间:2023-12-01 19:03:24 25 4
gpt4 key购买 nike

我使用DataOutputStream向服务器发送/接收字节流。首先我讨论我的重要代码部分,然后提出我的问题。

我有一个发送方法如下:

protected static void sendMessage (Socket socket, byte[] b)  throws IOException
{
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream(), 2048);
DataOutputStream serverOut = new DataOutputStream(bos);

serverOut.write(b, 0, b.length);
serverOut.flush();
}

我使用上述方法通过 DataOutputStream 实例向服务器发送消息。注意:Socket实例之前已初始化并作为参数发送到此方法;

此外,我还有一个 receive 方法,如下所示:

protected static void receive (Socket socket, byte[] b) throws IOException
{
BufferedInputStream bis = new BufferedInputStream (socket.getInputStream ());
DataInputStream serverIn = new DataInputStream (bis);

serverIn.readFully(b, 0, b.length);
}

在最后一步中,我展示了 main 方法:

public static void main(String[] args)
{
ServerSocketFactory socket_factory = ServerSocketFactory.getDefault();
InetAddress host = InetAddress.getByName("192.168.20.33");
ServerSocket server_socket = socket_factory.createServerSocket(1111,3,host);
Socket socket = server_socket.accept();
System.out.println(socket.isConnected());

byte[] request = new byte[]{48,48,48};
send(socket, request);

byte[] response = new byte[10];
receive(socket,response);
}

在正常情况下一切都很好,但我的问题是:当通过 socket.isConnected() 语句测试连接后服务器关闭时,send 方法工作正常,并且不会抛出任何异常,但在调用 receive 方法时,它会抛出未连接主机的异常。我很困惑,当服务器失败时,什么 send 方法不会抛出异常,但 receive 方法在连接丢失时抛出异常?还有没有办法在 write 方法中检查连接,类似于 readFully 方法,例如它会抛出异常?

(抱歉,如果我使用了错误的术语或语法,我正在学习英语。)

最佳答案

isConnected() 方法不会告诉您有关连接 Activity 情况的任何信息,只会告诉您套接字在某个时间点已连接。

有关处理断开连接的更多详细信息,请查看 this answer .

关于java - DataOutputStream.write(byte b[], int off, int len) 不抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11293778/

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