Java常犯错误分析——TCP/IP网络通信
1. IP错误、port错误、port被占用
发生场景:两个客户端同时连接同一个服务器
原因分析:服务器未开启多线程 相应客户端的链接
改正方式:开启多线程 可用 while(true)循环等待客户端连接
代码示例:
while(true){ java.net.Socket client = server.accept(); //创建一个线程对象,来处理 serverThread st = new serverThread(client); st.start(); }
|
2. 连接时不同的循环方式 while(true)
发生场景:两个客户端同时连接同一个服务器
原因分析:服务器未开启多线程 相应客户端的链接
改正方式:开启多线程 可用 while(true)
代码示例:
while(true){ java.net.Socket client = server.accept(); //创建一个线程对象,来处理 serverThread st = new serverThread(client); st.start(); } 对比: java.net.Socket client = server.accept(); while(true){ //创建一个线程对象,来处理 serverThread st = new serverThread(client); st.start(); } |
3. read() 与 readFully() 以及 for(){} 循环的区别。
发生场景:两个客户端同时连接同一个服务器
原因分析:服务器未开启多线程 相应客户端的链接
改正方式:开启多线程 可用 while(true)
代码示例:
java.io.InputStream ins = client.getInputStream(); java.io.OutputStream ous = client.getOutputStream(); java.io.DataInputStream dins = new java.io.DataInputStream(ins); for (int t = 0; t < len; t++) { by[t] = dins.readByte(); } //可以完全读尽的循环 读取方法 以及 dins.readFully(by) 是可以完全读尽的。 至于 dins.read(by) 则可能只读到一部分。 |
4. EOF(End Of File)Exception
发生场景:读取流的时候会发生。
原因分析:一个流已经读到了末尾
eg:写入的是10个byte, 却要读20个byte。
改正方式:注意输入输出流的匹配
5. 通信协议错误
发生场景:客户端与服务端传输出错
原因分析:客户端与服务端的通信协议不一致
改正方式:统一通信协议。
6. 内存溢出 Out Of Memory Error
发生场景:创建一个数组时。
原因分析:创建一个过大的内存空间 会发生这种错误。
改正方式:注意创建数组的长度大小。
代码示例:
7. 断开(正常的异常)
发生场景:网络无法连接等…
原因分析:存在各种客观原因,断电、断网等等,都有可能
改正方式:避免各种客观原因的发生,同时有应对方案
错误显示:
java.net.SocketException: Connection reset by peer: socket write error |
8. try-catch 与 throws 应用的位置
共同点:try-catch 是用于捕获程序运行时可能存在的异常,throws用于抛出异常,两种都可以用来解决存在异常的方法,
异同点:try-catch 可以自己处理异常,报告异常。而throws把异常抛出,等待其他处理。
说明:具体的情况,具体分析。要先看异常是否程序所必要的。
9. 性能问题
发生场景:程序运行缓慢
原因分析:创建了过多不必要的对象,浪费内存空间
改正方式:某些情况下的对象,可以定义成属性,避免重复创建
代码示例:
if (b == 1) { // 读取文件数据 int len = dins.readInt(); byte[] by = new byte[len]; } 改正: int len; byte[] by; if (b == 1) { // 读取文件数据 len = dins.readInt(); by = new byte[len]; } |
10. 服务端截屏与客户端接收屏幕的时间间隔
发生场景:服务端与客户端显示的画面不同步。
原因分析:网络传输缓慢,或者文件传输过大。
改正方式:压缩后传输,改进性能。
ps:对于javaeye的 这种发表博文的功能无语了... 求救于各位 该怎么弄 格式才会好看..
pps: 我在Word 里面编排的好好的, copy到这里就 全变了。
ppps: 可视化编辑器 与 发表出来的完全不同。。。 ⊙﹏⊙b汗