求高手点拨一个Socket通信软件的问题解决方案.
高手,您好:
我在做一个CS结构的Socket通信im系统,第一个作品,碰到了EOFException的问题..
经过几日的研究与求教,现在我得到了两个解决方案:
0.进行系统通信的“字节流”的传输方式的定义.
1.进行系统通信的“字符流”传输方式的readUTF()方法的重写.
现在,我希望得到高手的指导:
我的第二种方案,错在什么地方..
我做了一个实验:
S端的源代码:
一个“不停循环动态报错的console窗口”...
求高手点拨:
这是怎么回事..
应该怎么修改...?
谢谢高手!!
一百分奉上!!
一位日日夜夜向着理想奔跑的筑梦者
2013年10月30日早晨11点31分 解决方案 通信 软件 socket exception
[解决办法]
你C端发送完数据,不close连接的么?真是个坏习惯。
dops.writeUTF("Hello_world");
dops.close(); // 这个
s.close(); // 这个
服务器端也要。
[解决办法]
1. LZ你的代码极度不规范,你的命名什么的完全都不符合Java的一般规范
2. 你的Socket类没关闭,这是一个很不好的习惯,不管是io还是数据库资源,用完了都要关掉
3. 解答你的问题,为什么你会不停的循环打印:
a、 首先打印的原因connection reset的原因是你Client端没有阻塞你write以后就直接程序都运行完了,进程被关掉以后操作系统把你client端打开的socket直接关掉了,但是server不知道,所以在你lib类里尝试去读取消息的时候就会发现这个socket已经进入异常的状态,就抛异常了
b、 为什么会不停的循环,因为你lib类里读取消息的代码捕获到异常了以后没有break,还在不停的尝试打印,你这个处理异常的逻辑是错误的。