Java 套接字:read/write 以两种不同的方式一一传输
Java Sockets: read/write stream in two different ways one by one
关于 java.net.Socket 和 java.io。
服务端要给客户端发送消息,先用ObjectOutputStream写(读,客户端)一个对象,然后用BufferedWriter写(读,客户端)。
如果我只使用 ObjectXXXStream
或只使用 BufferedXXX
我可以做到,但不能在一个流中同时使用它们。我该怎么办?
服务器:
oos = new ObjectOutputStream(client.getOutputStream());
oos.writeObject(dc);
// oos.close();
bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
bw.write("hahaha");
bw.flush();
while(true){
line=br.readLine();
if(line != null){
ExecuteInput(line);
}
}
在客户端:
ois = new ObjectInputStream(socket.getInputStream());
XXX dc = (XXX) ois.readObject();
// ois.close();
String line;
while(true){
try {
// System.out.println("000000");
line=br.readLine();
// System.out.println("111111");
if(line != null)
System.out.println("aaaa "+line);
} catch (IOException e) {
System.out.println("222222");
e.printStackTrace();
}
}
您可以将 ObjectOutputStream
用于两个写入操作。一个套接字不能有 2 种不同类型的流,因此您会选择最实用的。
虽然,我会质疑是否真的需要发送对象。您可以改为发送对象的状态和一个 "opcode" 指定应该对该状态执行的操作。但是我不知道dc
的用途,所以无法确认
您不能在一个套接字上使用多个 streams/readers/writers,当其中一个或多个被缓冲时,并且 BufferedWriter
和 ObjectOutputStream
都被缓冲。
只需使用 ObjectOutputStream()
并将所有内容作为对象发送,或者通过 writeUTF()
发送字符串,这意味着您必须使用 readUTF().
读取字符串
关于 java.net.Socket 和 java.io。 服务端要给客户端发送消息,先用ObjectOutputStream写(读,客户端)一个对象,然后用BufferedWriter写(读,客户端)。
如果我只使用 ObjectXXXStream
或只使用 BufferedXXX
我可以做到,但不能在一个流中同时使用它们。我该怎么办?
服务器:
oos = new ObjectOutputStream(client.getOutputStream());
oos.writeObject(dc);
// oos.close();
bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
bw.write("hahaha");
bw.flush();
while(true){
line=br.readLine();
if(line != null){
ExecuteInput(line);
}
}
在客户端:
ois = new ObjectInputStream(socket.getInputStream());
XXX dc = (XXX) ois.readObject();
// ois.close();
String line;
while(true){
try {
// System.out.println("000000");
line=br.readLine();
// System.out.println("111111");
if(line != null)
System.out.println("aaaa "+line);
} catch (IOException e) {
System.out.println("222222");
e.printStackTrace();
}
}
您可以将 ObjectOutputStream
用于两个写入操作。一个套接字不能有 2 种不同类型的流,因此您会选择最实用的。
虽然,我会质疑是否真的需要发送对象。您可以改为发送对象的状态和一个 "opcode" 指定应该对该状态执行的操作。但是我不知道dc
的用途,所以无法确认
您不能在一个套接字上使用多个 streams/readers/writers,当其中一个或多个被缓冲时,并且 BufferedWriter
和 ObjectOutputStream
都被缓冲。
只需使用 ObjectOutputStream()
并将所有内容作为对象发送,或者通过 writeUTF()
发送字符串,这意味着您必须使用 readUTF().