[英]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種不同類型的流,因此您將選擇功能最強大的流。
雖然,我會質疑是否確實需要發送對象。 您可以改為發送對象的狀態和“操作碼”,以指定應使用該狀態執行的操作。 但是我不知道dc
的用途,所以我無法確認
當一個或多個緩沖區被緩沖並且BufferedWriter
和ObjectOutputStream
都被緩沖時,您不能在套接字上使用多個流/讀取器/ ObjectOutputStream
器。
只需使用ObjectOutputStream()
並將所有內容作為對象發送,或者通過writeUTF()
發送字符串,這意味着您必須使用readUTF().
讀取字符串readUTF().
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.