各位师兄:
大家好。最近在做一个SOCKET通信程序。如下: public static void main(String[] args) {
try
Socket telSocket = new Socket(host, port);
DataInputStream tel_in = new DataInputStream(telSocket.getInputStream());
OutputStream tel_out = telSocket.getOutputStream();
//////////////一连接上后就发送一个请求指令,这样服务端就会回送信息
String note = "ask readyok" + "\n";
tel_out.write(note.getBytes());
tel_out.flush();
System.out.println("send note is ok!");
////当连接保持的时候进行收发信息
while (!telSocket.isClosed()) {
tel_len = tel_in.readInt();
System.out.println(tel_len);
if (tel_len > 4092) {
tel_len = 4092;
}
byte buf[] = new byte[tel_len]; System.out.println("read is ok!");///接收信息OK
tel_in.read(buf);
String revice = new String(buf).trim();
System.out.println(revice);///打印显示出接收的信息
///每收到信息后就要向服务端发送一条心跳确认
String heard = "heard is jump"+ "\n";
tel_out.write(heard.getBytes());
tel_out.flush();
System.out.println("send heard is ok!"+heard);
}
}
catch (Exception e) {
System.out.println("connect telnet fail:" + host + ":" +
port + e);
}
}
程序运行调试的时候,我发现程序运行到循环体即while (!telSocket.isClosed()) 内时,第一次收发是正常的,第二次运行到tel_len = tel_in.readInt();就跳出异常了显示:java.io.EOFException!!!
我试了一下,如果把向服务端发送心跳确认的这部分代码屏蔽掉,那就可以读取正常了.这是为什么呢???如何能做到收发正常呢???
谢谢赐教.
大家好。最近在做一个SOCKET通信程序。如下: public static void main(String[] args) {
try
Socket telSocket = new Socket(host, port);
DataInputStream tel_in = new DataInputStream(telSocket.getInputStream());
OutputStream tel_out = telSocket.getOutputStream();
//////////////一连接上后就发送一个请求指令,这样服务端就会回送信息
String note = "ask readyok" + "\n";
tel_out.write(note.getBytes());
tel_out.flush();
System.out.println("send note is ok!");
////当连接保持的时候进行收发信息
while (!telSocket.isClosed()) {
tel_len = tel_in.readInt();
System.out.println(tel_len);
if (tel_len > 4092) {
tel_len = 4092;
}
byte buf[] = new byte[tel_len]; System.out.println("read is ok!");///接收信息OK
tel_in.read(buf);
String revice = new String(buf).trim();
System.out.println(revice);///打印显示出接收的信息
///每收到信息后就要向服务端发送一条心跳确认
String heard = "heard is jump"+ "\n";
tel_out.write(heard.getBytes());
tel_out.flush();
System.out.println("send heard is ok!"+heard);
}
}
catch (Exception e) {
System.out.println("connect telnet fail:" + host + ":" +
port + e);
}
}
程序运行调试的时候,我发现程序运行到循环体即while (!telSocket.isClosed()) 内时,第一次收发是正常的,第二次运行到tel_len = tel_in.readInt();就跳出异常了显示:java.io.EOFException!!!
我试了一下,如果把向服务端发送心跳确认的这部分代码屏蔽掉,那就可以读取正常了.这是为什么呢???如何能做到收发正常呢???
谢谢赐教.
解决方案 »
- 实现秒表类
- Java 多线程技术,到底是怎么一回事啊?怎样实现呢?另外,如何为按钮增添事件呢?谢谢了
- java 递归问题
- 用过org.apache.poi.hssf请进,怎么读取excel文件中的日期值,救命!
- 为什么Java Communications API没有windows平台的
- 有关线程问题,请示帮助
- 求助:有没有能查看磁盘空间和CPU使用率的JAVA类??
- 用Process类实现了调用DOS命令,可是怎么保证在异常的时候会destroy()?finalize()好象没作用啊。
- 菜鸟的问题,希望有人帮忙!谢谢
- 我想开发一个基于BS结构的办公自动化程序,不知道用哪种语言合适,请大虾指教!
- 请教:在swing中如何给窗口加一个F1的快捷键?
- 求救!非法的表达式开始!!
还有
看看
if (tel_len > 4092) {
tel_len = 4092;
}
有没有进入这句话
运行到循环体即while (!telSocket.isClosed()) 内时,第一次收发是正常的,第二次也正常,第三次运行到tel_len = tel_in.readInt();就跳出异常了,显示信息变成了:java.net.SocketException:connection reset
何解???
嗯,好象是这样,我刚才又调试了一下,每次当服务端把一组信息转送结束后,这时再运行到
tel_len = tel_in.readInt();就出错了。
跳出异常了显示:java.io.EOFException!!!
应该如何解决呢???谢谢
think in java 各章后练习答案.....
http://blog.csdn.net/heimaoxiaozi/
或者你这种要自己程序里面定义好,服务器开始的地方一次性发送我要送多少字符的数据,然后只在最开始读入总共多少字节,一次4092的话自己算总共要读多少次。或者像你的程序应该是服务器端每隔4092发送一次后面4092字节内还有多少字节会被发送(好像一般不会这么干的,呵呵)
以上。
现在我也遇到了这个问题了
不是挖坟
静待解决