Java常见错误总结——TCP/IP网络通信

本文列举并解析了Java网络编程中常见的错误,包括IP及端口错误、多线程处理不当、读取方法区别、EOF异常、通信协议不一致等问题,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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:写入的是10byte, 却要读20byte

改正方式:注意输入输出流的匹配

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汗

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值