我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
方法中检查连接,对于示例它会引发异常?
(对不起,如果我使用了错误的术语或语法,我正在学习英语。)