java学习

本文探讨了网络通信中常见的错误及其解决方案,包括IP与端口配置错误、内存溢出问题、协议一致性、读取字节的方法区别等内容,并强调了细节的重要性。

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

网络通信中常犯错误与解决办法

1、 IP、Port错误,或者Port被占用
服务端与客户端的IP或Port不向对应,或服务端所使用的Port已经被占用。
2、 等待连接时,不同循环方式可能导致内存溢出
(1)原因: 对于阻塞等待客户端并交给线程处理时的流程没有弄清楚。
(2)代码示例:
//创建服务器对象
java.net.ServerSocket ser=new java.net.ServerSocket(port);
//等待客户机进入
java.net.Socket sc=ssc.accept();
while(true){
//启动一个线程去处理连接
ProcessThread pt=new ProcessThread(sc);
pt.start();
如上代码如果进入多个用户,就会造成内存溢出异常:OutOfMemoryError
(3)解决办法:
java.net.ServerSocket ser=new java.net.ServerSocket(port);
while(true){
//等待客户机进入
java.net.Socket sc=ssc.accept();
//启动一个线程去处理连接
ProcessThread pt=new ProcessThread(sc);
pt.start();
3、 双方协议没有达成一致
网络通信中,服务器与客户端双方能否正常传输信息,得达成一定的协议,才能进行。
这是通信的基础与保障。虽然我们知道一定要保持双方的协议一致。但是实际操作中还

是难免出现我们意想不到由协议不一致而造成的问题。解决此类问题要:1.细心,熟悉通信中

每一个流程。2.对于底层的数据传输要有一定的了解。

4、 read([])和readFully([])的区别
(1) DataInputStream.read([])方法:从包含的输入流中读取一定数量的字节,并将

它们存储到缓冲区数组 b 中。以整数形式返回实际读取的字节数。将读取的第一个字节存储

到元素 b[0] 中,将下一个字节存储到 b[1] 中,依此类推。读取的字节数至多等于 b 的长

度。
read(b) 方法与以下方法的效果相同:
read(b, 0, b.length) :其意思是:从包含的输入流中将最多 len 个字节读入一个 byte 数

组中。尽量读取 len 个字节,但读取的字节数可能少于 len 个,也可能为零。
(2) 而DataInputStream.readFully([])方法:从输入流中读取一些字节,并将它们存

储在缓冲区数组 b 中。读取的字节数等于 b 的长度。
(3)简而言之:在不发生异常的情况下,read([])方法不一定能全部读取数组中的元素

,而readFully([])方法能读取全部的数组元素。
5、 内存溢出
对于通信过程中常常会有读取字节时、创建对象时对于其中的流程不清晰造成可能的内

存溢出。

6、 EOFException:end of file exception,
就是流中只有一定量的字节,而输入流却规定了读取更多的字节,造成最后到达流中字

节结尾而没有字节供输入流来读取的现象。这可能是双方协议没有达成一致,而导致的要求读

取过多字节的异常。或者是流中的字节因为某些原因丢失,而造成读取时没有足够多的字节读

取。

7、 断开(正常的异常)
因某些因素某一方突然断开连接,终止通信的异常。

8、 try-catch与throws的用法。
还未有深入的理解


9、 性能问题
如:(1)某些信息,只需要写入byte类型的值就可以完全地传达出信息,而写入了int类

型等,造成输入输出以及传送时占用更多的内存,以致降低程序反应速度。
(2) 本来只需要创建一个对象而可以重复赋值,却在循环中重复创建对象,重复赋

值,造成占用了更多的内存。




10、自己的问题

未完待续。。。。。

总结:1.有经历就会有错误,所以我觉得目前要尽快地“经历更多”。

2.祸乱常积于忽微!我们很多犯错的地方是我们以为没有错的而地方。故不可小视细节!

因还未完善 难登大雅之堂,故只能先放到这里了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值