日期:2014-05-20  浏览次数:20779 次

Socket编程中 ObjectInputStream和ObjectOutputStream传输对象为什么只能得到序列化的第一个对象
编写socket通信程序是出现了这样一个错误,不知道原因希望各位大侠帮忙。
整个程序框架是这样的。客户端将序列化过的对象同过Socket传输到服务器端。服务器端反序列化后再将数据序列化回传给客户端。
客户端相关代码:
public void Connect()
{
try {
s = new Socket("127.0.0.1",2000);
dos = new ObjectOutputStream(s.getOutputStream());
dis = new ObjectInputStream(s.getInputStream()); started = true;

}

private class tfTxtListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String Txt = tfInTxt.getText().trim();
try {
cText.SetText(Txt);
System.out.println(cText.GetText()); 
dos.writeObject(cText);
dos.flush();
//dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tfInTxt.setText("");
}
服务器端:
try{
while(bConnect){
test = (CContext)dis.readObject();
System.out.println(test);
String txt = test.GetText();
System.out.println(txt+"servershoudao");
for(int i=0;i<ltClients.size();i++){
Client c = ltClients.get(i);
c.Send(txt);
}
System.out.println(txt);
}
dis.close();

public void Send(String str){
try {
System.out.println(str+1);
cText.SetText(str);
dos.writeObject(cText);
} catch (IOException e) {
// TODO Auto-generated catch block
ltClients.remove(this);
//e.printStackTrace();
}
}

test = (CContext)dis.readObject();只能接收到第一次传输的数据。以后不管客户端向其发送什么数据,收到的结果都是第一次的数据。比如:在客户端第一次发送一个:"你好". 服务器端能接收到并成功反序列化并再序列化后回发给客户端。当客户端再向服务器端发送一个:"woshi"或者对象时。服务器端接收到并反序列化后的还是"你好"。晕死了!谁能告诉我这是为什么?

------解决方案--------------------
new ObjectOutputStream