zoukankan      html  css  js  c++  java
  • Java Socket中使用ObjectInputStream对象的注意事项

    Socket编程中一个很奇怪的现象:用DataInputStream对象没错,但改为ObjectInputStream就出错了,而且try...catch还抓不到异常。 ……

     

    Socket编程中一个很奇怪的现象:用DataInputStream对象没错,但改为ObjectInputStream就出错了,而且try...catch还抓不到异常。

    例如在Socket客户端中,使用DataInputStream进行下述编程,很正常,不会出现问题:

    1. DataInputStream dataIn = new DataInputStream(socket.getInputStream); 
    2. DataOutputStream dataOut = new DataOutputStream(socket.getOutputStream); 

    但若改用ObjectInputStream对象进行编程,如下:

    1. ObjectInputStream dataIn = new ObjectInputStream(socket.getInputStream); 
    2. ObjectOutputStream dataOut = new ObjectOutputStream(socket.getOutputStream); 

    这时程序就死锁住了,不报错或异常出来,用try...catch也抓不到异常信息。

    解决方案:将dataIn于dataOut的顺序换一下,即dataOut在dataIn之前,这样程序又恢复正常了,不会出现死锁卡住的现象。如下:

    1. ObjectOutputStream dataOut = new ObjectOutputStream(socket.getOutputStream); 
    2. ObjectInputStream dataIn = new ObjectInputStream(socket.getInputStream); 

    这样一来,就是先创建输出流对象,再创建输入流对象。同样在服务器端改为先创建输入流对象,再创建输出流对象,一个完整的Socket通信才不会出错。

    转自:http://hi.baidu.com/liquan363/blog/item/3382a924fb0e066c34a80fad.html

  • 相关阅读:
    VCC、VDD、VEE等区别
    Matlab运行速度/效率受哪些因素影响?
    strtok/atoi/atof/atol函数用法 详解
    双色球随机生成
    万能指针void*学习
    空指针和 指向指针的指针
    指针运算
    快速编译c/cpp文件
    贪吃蛇(C)
    判断规定时间内有无输入
  • 原文地址:https://www.cnblogs.com/gaoqichao/p/2603712.html
Copyright © 2011-2022 走看看