通信入门总结

第一篇总结啊,应为等JAVAEYE的注册限定天数,所以一直拖到今天才开始写...那废话就不多说了,开始做总结。
问题1:ip错误 port错误 port占用
这个问题,多是不细致造成的,比如 new ServerSocket(); 没加上port自然就会报错。port占用多是端口还没关闭又运行程序造成。至于ip错误...粗心不解释...
问题2:内存溢出 OutOfMemoryError
这是个麻烦的问题,其产生的原因也是多方面的,就我自己编写远控的时候就碰到了这个问题,先把代码段帖出来:
int size = dis.readInt();// 得到图片大小
byte[] b = new byte[size];
// 读出图片
dis.readFully(b);//与read(b);的区别
先解释下,dis是dataInputStream,这段是读出图片并以byte[]保存,如果把readFully()换成read(),程序就会报内存溢出异常。以一个形象的比喻来区分两者的区别:公交车发车不外乎两种情况,第一种是满员发车,第二种是到点了不管满布满都得发车。
readFully()正是第一种情况,read()正是第二种。所以用read()出错的情况不如理解为车站尽发些人少的车在浪费资源...
当然,内存溢出还有其他的情况,比如你鬼使神差的写了个死循环...或者你莫名其妙的打乱了通信协议...
问题3:accpet()位置问题
ServerSocket ss;
Socket client = ss.accpet();//这个是会阻塞的
while(...){
...}
这样写当然错了...祈祷不会死循环吧...client = ss.accpet();放循环语句里面才是正解...
问题4:通信协议不一致
这个还有什么好说的么...
问题5:dataInputStream中的read()问题
这个么...只要协议没问题...公交车站站长数学过关...也就没好大的问题了...
问题6:EOF Exception (我发现我好像越总结越精炼了...)
这个异常,我也亲身体验了一把,这个异常的官方解释是这样的:当输入过程中意外到达文件或流的末尾时,抛出此异常。我任为80%的人会认为这句话莫名其妙(事实上API里面的很多解释都让人费解...),我之到犯了这个错误才慢慢的理解了这个异常...
要出这个异常,其实很简单,先Socket client = ss.accpet();然后用client去得到输入输出流,然后开始传送数据,本来客户机和服务器是很和谐的你来我往着,这时突然客户机搞了个client.close();这样不和谐的东西出来。于是乎服务器这边就很意外的到达了文件或流的末尾,于是你就EOF了...
问题7:客户端与服务器断开报的异常
正常的异常么...
问题8:try{}catch(Exception e){}与throws,throw的选择
这个问题很有技术含量,我现在还很纠结,网上有很多总结的不错的文章,我在这里就不自讨没趣了...
问题9:性能方面的问题
这个其实就是一个代码优化的问题,程序效率提高的问题,就举一个例子:
byte b;
while(...){
...//对b进行处理
}
这段代码的效率肯定要高于把byte b;放while里面。
问题10:我自己的问题
这个问题是个问题啊...最大的问题应该还是程序封装的问题...现在写出来的东西适用性真的不怎么样...这是一个长久努力的方向...
还有个问题就是try{}catch(...){}块的问题,现在基本上是一个try{}catch(...){}包办所有异常,这样必然是很不妥的...
......暂时先写这么多...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值