1.java.nio.*;
这是jdk1.4中新增加的功能,以前版本都没有;这个package下的类可以实现非阻塞socket。2.用InputStream的read方法接收数据的时候,如果返回值小于0表示连接断了。这是阻塞方式下的判断方式;非阻塞方式下,还不知道;相信java.nio中也有其他处理方法。

解决方案 »

  1.   

    当A和B建立Socket连接后,如果在A端我向Socket写入既有对象又有流的数据,那么,我在B端怎样改通过什么办法将这些对象和流都正确地读出来?或者有没有其他更好的办法?在A端的代码(其中SocketMsgInfo为一个Java对象):
    ObjectOutputStream oos = new ObjectOutputStream(_skt.getOutputStream());oos.writeObject("Welcome you!");
    oos.writeObject(new SocketMsgInfo("This is SocketMsgInfo"));
    oos.writeObject(new SocketMsgInfo("Transger is completed!"));FileInputStream fis = new FileInputStream("C:/PkgClnup.log");
    byte buf[] = new byte[64];
    int nReaded = 0;
    while((nReaded = fis.read(buf)) >= 0){
         oos.write(buf);
    }
    oos.flush();oos.writeObject(new SocketMsgInfo("Transger is completed!"));由于在该socket中既有对象又有流,所以我在B端使用readObject和read的方式来读取,即:
    try{
        while(ois.readObject()) ...
    }catch(Exception e){
        while(ois.read(buf)) ...
    }
    我是想先读出对象,在读流数据,但是,如果流数据后还有对象的话,就不能将该对象读出来了。因为方法read被阻塞了。
      

  2.   


    如果通信的双发都是java程序写的,那么没有问题,但是如果有一端不是java的话,那就不行了。一般在进行socket编程的时候,都用InputStream和OutputStream来读写二进制数据,然后才对这个数据进行解析处理。
      

  3.   

    2。如果A和B的连接已经建立,但是在某一时刻,A端出现异常,如程序异常终止,或突然断电,那么,B端能否“立刻发现”他与A端的连接已经被终止?因为只有能“俘获”到这个“事件”,我才能做起他针对连接被断开的处理。
    -----------在网络中判断连接是否终止,一般的标准是超时。比如判断某主机是否一直alive,就要每隔一定时间发一个package