网络通信是很强大滴,网络上一切数据的传输都属于网络通信。本人现在正在学这方面的东东,写程序时出的错误也不少,综合javafound爷所讲过的,在此将几个常见的错误拿出来晒晒。
1. ip,端口错误
客户端设置的ip或端口不对
服务器端初始化时所设置的端口已被其他程序占用,或者超出了0~65535这个范围
2. 保持连接时不同的循环方式
客户端和服务器端在通信时都有一个消息接收线程在不断的循环读取流中的数据,而读数据的方法如read(),readInt(),read(byte[] b)等方法在流中无数据时会发生消息阻塞,所以如果两者的循环方式没有好好处理的话就会出现两边都是消息阻塞状态的情况,就像两个人打电话,你不说话,我也不说话,看谁耗得久......蛮恶心的
3. 协议不对口
协议啊协议,网络通信中不说是最重要的,但至少也是个元老级的牛逼角色吧
协议是通信双方之间规定的一种消息格式,没了它,那么通信就无从谈起。打个比方吧,为什么中国要在全国普及普通话乜?想象下,你和一个外地人交流(比如说福建的),用方言......嘿嘿,小样,准备悲剧吧
4. read(byte[] b) 和 readFully(byte[] b) 的区别
按我的理解,前者和后者是儿子与老子的区别,儿子照着老子办事,可是一旦网络繁忙拥堵的时候儿子就变脑残了,数据丢失或出错是经常的事,而老子就可靠些,不管怎么拥堵,它总能有条不紊的保证数据的完整性,到底是老麻雀啊
5. EOFExcepiton
EOF 即 End Of File,表示已读到文件或数据末尾,比如说客户端发来一个byte,而服务器却调用readInt(),先读完那个byte的8个位,还有24个位要读啊,但后面却没有了,怎么办乜?于是就丢给你个EOFExcepiton......
6. 断开连接时发生的正常异常
服务器和客户端不会永远连接吧,于是就会有个断开的问题。当某一方断开连接时,另一方就会报个SocketConnectException的异常,这个是正常的,不用管它
7. try catch和thows Exception的区别
此两者都是关于异常机制的处理方法,前者是在内部处理,自力更生,后者是把异常丢给调用它的方法处理,就像我一个女性朋友说的,谁看上我谁养我.............
8. 性能问题
如果在一个程序中创建了很多不必要的对象的话,这是个很不好滴现象,因为只要是对象,内存就得为他分配空间,占着茅坑不拉屎这句话大家应该都熟吧........此问题牵扯到了设计模式
9. 异常内存错误
这个问题的一个最常见的例子就是数组越界,只要是写过跟数组有关的程序的人应该都不会陌生了吧
10. Connection refused (连接拒绝)
当你碰到这个问题时,去找你的服务器吧,九成九是没开,还有零点一成是个谜......
11. Connection timed out(连接超时)
这个问题一般是网络不通所造成的,如果要确认的话就去cmd里面PING一下吧