我在用socket对数据时,出现invalid stream header的错误,请问这是什么原因呢? 你用的是ObjectInputStream 和 ObjectOutputStream 传输数据 吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的思路是: 把字符串发送给Web服务器Server,如果Server返回的是结果字符串,此次任务结束;否则,若Server返回的是字符串“Busy”,则弹出对话框,让用户选择等待与否。如果用户选择等待,则再发字符串“1”给Server,继续等待从Server返回的结果或“Busy”信号。如果用户不等待,此次结束。当接收到Server传来的字符串”Busy“时,我在弹出的对话框中选择“等待‘,即把”1”发送给了Server,Server发送了结果(不是“Busy”),但我却读不到,出现了上述错误!请问是什么原因,谢谢!!急啊!!!我的线程的入口函数如下:public void run() { //作业是否完成 boolean jobFinished = false; //作业是否取消 boolean jobCancel = false; OutputStream out = null; ObjectOutputStream oout = null; InputStream inputS = null; ObjectInputStream objInputS = null; System.out.println("执行到getSocket之前!"); Socket s = getScoket(); try { System.out.println("进入try.."); //将任务的属性情况发送给Web服务器 inputS = s.getInputStream(); // objInputS = new ObjectInputStream(inputS); out = s.getOutputStream(); oout = new ObjectOutputStream(out); //将作业发送给Web服务器 oout.writeObject(job); oout.flush(); System.out.println("已将任务发送给WebServer,请等待回应........"); //判断接收到的数据是否是仪器的“Busy”信号 //BufferedReader bufReader=new BufferedReader(inputSR); // DataInputStream dataInputS=new DataInputStream(inputS); //当作业没有完成,并且没有取消时 while ( (!jobFinished) && (!jobCancel)) { //如果while外,try内,用objInputS = new ObjectInputStream(inputS);则出错 objInputS = new ObjectInputStream(inputS); //接收从Web服务器传来的消息 Object obj = objInputS.readObject(); System.out.println("返回的对象是:"+obj); // System.out.println(obj); //如果传来的是"服务器忙"的消息 if (obj.toString().equals("Busy")) { System.out.println("服务器忙!!"); //在applet上弹出一个询问对话框 //如果用户要等待,给Web服务器发送”1“,表示继续,否则发送”0“,将接收的任务放弃 if (applet.queryDialog() == 1) { oout.writeObject("1"); oout.flush(); System.out.println("Continue"); } else { oout.writeObject("0"); oout.flush(); //将标记jobCancel置为true jobCancel = true; System.out.println("stop"); } } //服务器传来的是作业的测量结果 else { //返回的任务结果 jR = (jobReturn) obj; //将标记jobFinished置为true jobFinished = true; } } out.close(); oout.close(); s.close(); setMeasuredValue(jR); drawData(jR); } catch (IOException e) { System.out.println("send object error!"); System.out.println(e.getMessage()); } catch (ClassNotFoundException e) { System.out.println("ClassNotFound error!"); e.printStackTrace(); } finally { try { if (out != null) { out.close(); } if (oout != null) { oout.close(); } if (inputS != null) { inputS.close(); } if (objInputS != null) { objInputS.close(); } if (clientSocket != null) { clientSocket.close(); } } catch (IOException e) { System.out.println("IO error in finally statement"); e.printStackTrace(); } } jxl在一个单元格 输出换行的数据 急求 Java 实现UDP打洞 如何用java读取图片到变量里。 RMI的policy问题 关于applet读取站点文件 彩色文字打印到DOS 请问用什么方法可以获取系统时间啊? 用JAVA如何解析XML阿? 怎么才能实现右键菜单啊??? 春节将至,大家来抢分吧! 关于SWT/JFace的疑问(回帖就给分) 谁能给个10进制转2进制的方法啊 用到递归
!
我的线程的入口函数如下:
public void run() {
//作业是否完成
boolean jobFinished = false;
//作业是否取消
boolean jobCancel = false;
OutputStream out = null;
ObjectOutputStream oout = null;
InputStream inputS = null;
ObjectInputStream objInputS = null; System.out.println("执行到getSocket之前!");
Socket s = getScoket(); try {
System.out.println("进入try..");
//将任务的属性情况发送给Web服务器
inputS = s.getInputStream();
// objInputS = new ObjectInputStream(inputS);
out = s.getOutputStream();
oout = new ObjectOutputStream(out);
//将作业发送给Web服务器
oout.writeObject(job);
oout.flush(); System.out.println("已将任务发送给WebServer,请等待回应........"); //判断接收到的数据是否是仪器的“Busy”信号
//BufferedReader bufReader=new BufferedReader(inputSR);
// DataInputStream dataInputS=new DataInputStream(inputS);
//当作业没有完成,并且没有取消时
while ( (!jobFinished) && (!jobCancel)) {
//如果while外,try内,用objInputS = new ObjectInputStream(inputS);则出错
objInputS = new ObjectInputStream(inputS);
//接收从Web服务器传来的消息
Object obj = objInputS.readObject(); System.out.println("返回的对象是:"+obj);
// System.out.println(obj);
//如果传来的是"服务器忙"的消息
if (obj.toString().equals("Busy")) {
System.out.println("服务器忙!!");
//在applet上弹出一个询问对话框
//如果用户要等待,给Web服务器发送”1“,表示继续,否则发送”0“,将接收的任务放弃
if (applet.queryDialog() == 1) {
oout.writeObject("1");
oout.flush();
System.out.println("Continue");
}
else {
oout.writeObject("0");
oout.flush(); //将标记jobCancel置为true
jobCancel = true;
System.out.println("stop");
}
}
//服务器传来的是作业的测量结果
else {
//返回的任务结果
jR = (jobReturn) obj;
//将标记jobFinished置为true
jobFinished = true;
}
} out.close();
oout.close();
s.close(); setMeasuredValue(jR);
drawData(jR);
}
catch (IOException e) {
System.out.println("send object error!");
System.out.println(e.getMessage());
}
catch (ClassNotFoundException e) {
System.out.println("ClassNotFound error!");
e.printStackTrace();
}
finally {
try {
if (out != null) {
out.close();
}
if (oout != null) {
oout.close();
}
if (inputS != null) {
inputS.close();
}
if (objInputS != null) {
objInputS.close();
}
if (clientSocket != null) {
clientSocket.close();
}
}
catch (IOException e) {
System.out.println("IO error in finally statement");
e.printStackTrace();
}
}