网络通信中常见的问题小结

 1.ip错误  port错误 port已经占用

 

     那。。这些问题,说穿了就是粗心,不仔细。

     客户端的IP 和端口port与服务器的IP和端口port要能对的上号。没连接上会报什么错,我想这个就不用事例了。当然还要记住先运行服务器(额,我想是)。

     port的值是在1~65535之间,所以不要超出,否则也会报错,并且前面的大约1000个端口号是被占用,因此一般使用数值较大的端口号。

 2.内存溢出

    这个错误就犯的多了,常常可以看见异常出现的----"OutOfMemoryError"。

      代码事例

  

//等待客户机连入 
java.net.Socket client = sk.accept();
 while (true) { // 启动一个线程去处理: 
ProcessThread pt = new ProcessThread(client); 
pt.start();
 } 

  

    这样的代码运行后呢,会报出这样的异常信息:

   Exception in thread "main" java.lang.OutOfMemoryError: unable to create 

   new native thread

     处理方法:

   把java.net.Socket client =sk.accept();这行代码放入while(true)中

    当然这个是在等待连接时,不同循环造方式导致的内存溢出。

  3.通信协议的问题

      主要原因是服务器和客户端的协议不一致,发送的消息,数据不能正常接受。

      也能导致内存溢出:

      比如我们先定义的协议是byte是1就是一张图片,然后加上数据长度,再加上数据,如果这时客户端接受时没有遵循协议,少读了几个字节,进行下一个循环,最终

同样将导致内存溢出。

       

 4.read()和readFully()以及使用for循环来读取数据

      这三个都用过,显然在使用read()来读取数据时容易造成数据的丢失,比如图片不能完整的传送。原因是我的数据读完 ,但是到了我接收的时间,我会先接收。

      readFully()感觉上和for循环读取数据没什么区别。与read()不同的是,是读完数据,再接收。

 

 5.死循环死递归

  这个错误其实也是常和内存溢出一起出现

  事例代码也同上:

 //等待客户机连入
 java.net.Socket client = sk.accept();
 while (true) {
        // 启动一个线程去处理:
    ProcessThread pt = new ProcessThread(client);
    pt.start();
 }
 这个要注意,再次提醒

 6.  EOFExceptionend of file exception

     这段异常产生的原因是读到文件末尾没有数据了,发送100个数据,但是要读200个,显然是不可能的。主要主义读取的方法。不要发送是一张图片,而客户端却不停的循环读取。。

7.正常的报错

      这个其实就是断开了连接,当你关闭了连接,或者停电了,网线掉了,等等情况都会报错,这是很正常的错误。

 8.try catch 的位置不同

    try catch的位置不同会导致死循环

    还有try catch  和 throw 使用的时机---这个自己看着办

    给自己处理的就用try catch 给别人(方法的调用着)处理就用throw 

 9.性能问题(提高效率)

      其实可以提高性能的地方有很多方面,比如算法啊,属性的定义啊

      比如在代码中多次重复创建的对象可以定义为属性

       java.awt.Robot robot=new java.awt.Robot();
      //要截取的区域大小
      Rectangle rt=new Rectangle(0,0,300,300);

       事例中,因为要不停的得到屏幕的截图,所以会不停重复的创建截取对象

       我们将他定义为private私有属性,免除创建对象的重复性,大大提高效率。

       代码的精简也是效率提高的途径。

 10.自己的问题

        (1) 屏幕传送的不稳定

               有是很快,有是很慢。我想是因为截取了全屏图片,又没有进行压缩,最后迟早会报一个内存溢出。

        (2)鼠标移动控制很慢----调试中,应该是代码的性能性不高。

       今天在公司随便翻了本书,瞟到了一句话:一个优秀的程序员所具有的三大美德:懒惰、傲慢、缺乏耐心。我了个去,我乍一看这三种美德似乎都具备了,结果果然和自己想的一样是有深层意义的,这个就不详说了。总而言之,自己就是懒了,是心懒。我想这是自己最大的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值