我做了一個通過ObjectInputStream從服務器接收數據的Messenger。 我希望能夠檢索/發送可串行化文件,同時還能夠從用戶檢索/發送消息。對通過ObjectInputStream收到的數據進行排序
我無法找到一種很好的方法來在兩種(對象和消息)之間進行排序而不會與消息傳遞發生衝突。我試過使用兩個流爲同一個套接字(數據*流&對象*流),它似乎建立良好,但當我嘗試通過Data *流發送一條消息從服務器到客戶端時,我在我的客戶端上獲得java.net.SocketException: socket closed
。 (只有當我發送消息時纔會發生)
有人可以指出我正確的方向,我將如何通過流檢索2種不同類型的信息? (不考慮一個簡單的辦法,我不想要做writeObject("[message]"+input);
或廉價把戲像
(EDIT)解決方案:
感謝亞諾什,他一直激勵着我寫這個代碼:')感謝的人
輸入接收器:
protected Object data;
public synchronized Object receivedData() throws ClassNotFoundException,
IOException {
data = in.readObject();
if(!(data instanceof String)) {
retrieveObject();
data = "";
System.out.println("Object");
}
return data;
}
與MES刺激線:
ExecutorService pool = Executors.newScheduledThreadPool(1);
private Runnable receiveData;
public void receiveData() {
receiveData = new Runnable() {
public void run() {
String input;
try {
while((input = (String) receivedData()) != null) {
if(input.length() > 1)
System.out.println(input);
}
}catch(IOException | ClassNotFoundException e){ e.printStackTrace();}
}
};
pool.execute(receiveData);
}
如果您有任何改進建議,請讓我知道,我會更新此代碼。
你可以舉個例子嗎?如果我要發送(讓我們說..)User.java從Server - > Client,從服務器發送的對象是用戶,並檢索的對象是用戶。用戶擴展對象,所以我必須做'用戶user =(用戶)in.readObject();',但如果我使用類進行排序,將如何那工作? –
@VinceEmigh查看我更新的帖子。 – janos
可能需要一段時間才能測試出來,但這似乎合乎邏輯。我會嘗試一下,如果它能正常工作,請更新。謝謝:)另外,謝謝你的例子,這就是我的想法 –