网络通信中常犯错误与解决办法
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.祸乱常积于忽微!我们很多犯错的地方是我们以为没有错的而地方。故不可小视细节!
因还未完善 难登大雅之堂,故只能先放到这里了
分享到:
相关推荐
最新全套Java学习资料打包 最新全套Java学习资料打包 最新全套Java学习资料打包 最新全套Java学习资料打包 最新全套Java学习资料打包 最新全套Java学习资料打包 最新全套Java学习资料打包 最新全套Java...
Java学习路线(鱼皮) Java学习路线(鱼皮)是一条龙版本的学习路线,从入门到入土,旨在帮助学习者快速掌握Java开发的所有知识点。本路线的特点是新、完整、实用、开源、回馈社区、持续更新。 学习路线的主要...
最全JAVA学习路线一条龙思维导图(附资源链接)PS:程序员鱼皮 1. 最新,完整一条龙的大厂 Java 学习路线,从入门到入土 2. 同时适用于想全面学习 / 快速求职的同学,可以根据符号来定制自己的专属学习路线 3. 给出...
java学习java学习java学习java学习java学习java学习
### Java学习入门资料知识点梳理 #### 一、Java语言历史与发展 - **起源与早期发展** - **前身**:Oak(1990年),由James Gosling等人在Sun Microsystems开发。 - **Green项目**:Sun Microsystems于1990年开始...
《Java学习指南(第4版)(上、下册)》是畅销Java学习指南的ZUI新版,详细介绍了Java 6和Java 7的语言特性和API。本书全面介绍了Java的基础知识,力图通过完备地介绍Java语言、其类库、编程技术以及术语,从而成为一本...
《Java入门1·2·3:一个老鸟的Java学习心得》是一本与众不同的Java入门好书。作者以独特的视角,向Java初学者讲述了如何才能真正理解和掌握Java语言。《Java入门1·2·3:一个老鸟的Java学习心得》充分考虑了初学Java...
java学习java学习
总之,“Java学习资料大全”应该包含了以上各个领域的教程、示例代码、实践项目和相关书籍,为初学者到高级开发者提供了全面的学习资源。通过深入学习并不断实践,可以成为一名熟练的Java开发者。
java完整学习笔记 JAVA学习目录
java学习方法及学习总结 java学习方法及学习总结 java学习方法及学习总结
java 学习路线图-2018最新 以有趣和好理解的方式展示Java和Web的内容 设计一些略有挑战的练习 创造一些便于理解和消化知识点的方式,享受这个创造的过程
JAVA学习资料大全JAVA学习资料大全JAVA学习资料大全
【JAVA编程学习】是计算机科学领域的一个重要主题,尤其对于初学者来说,它是一个非常有价值的起点。Java是一种广泛使用的面向对象的编程语言,以其“一次编写,到处运行”的特性而闻名,这得益于Java虚拟机(JVM)...
标题《30套最实用JAVA学习视频教程合集》所涉及的知识点主要围绕Java学习资源的汇总。Java作为一门广泛使用的编程语言,在互联网和企业级应用中扮演着重要角色。为了帮助初学者或者已经从事Java开发的程序员快速掌握...
B站韩顺平老师Java学习路线
而今天,我们要介绍的这份《良葛格JAVA学习笔记》便是一份得到广泛好评,深受学习者喜爱的学习资源。 首先,我们不得不提的是这份笔记的作者——“良葛格”,一个在编程教育界颇具声望的人物。他的这份学习笔记因...
《JAVA学习从150道经典例题突破》这份资源,正是为了满足广大编程初学者这一需求而精心制作的。 本书的编排结构从基础概念入手,逐步向更深层次的内容推进,每一章都围绕着特定的编程主题展开,通过实例帮助学习者...