socket通信中的java.io.EOFException有关问题

socket通信中的java.io.EOFException问题各位师兄:大家好。最近在做一个SOCKET通信程序。如下:publicstaticv

socket通信中的java.io.EOFException问题
各位师兄:
      大家好。最近在做一个SOCKET通信程序。如下:

        public   static   void   main(String[]   args)   {
            try
                              Socket     telSocket   =   new   Socket(host,   port);
                      DataInputStream     tel_in   =   new   DataInputStream(telSocket.getInputStream());
                  OutputStream     tel_out   =   telSocket.getOutputStream();
//////////////一连接上后就发送一个请求指令,这样服务端就会回送信息
                                String   note   =   "ask   readyok "   +   "\n ";
                                tel_out.write(note.getBytes());
                                tel_out.flush();
                                System.out.println( "send   note   is   ok! ");
        ////当连接保持的时候进行收发信息            
                              while   (!telSocket.isClosed())   {
                                tel_len   =   tel_in.readInt();
                                System.out.println(tel_len);
                                if   (tel_len   >   4092)   {
                                        tel_len   =   4092;
                                }
                                byte   buf[]   =   new   byte[tel_len];

                                System.out.println( "read   is   ok! ");///接收信息OK
                                tel_in.read(buf);
                                String   revice   =   new   String(buf).trim();
                                System.out.println(revice);///打印显示出接收的信息
                               
                                ///每收到信息后就要向服务端发送一条心跳确认      
                                String   heard   =   "heard   is   jump "+   "\n ";


                                tel_out.write(heard.getBytes());
                                tel_out.flush();
                                System.out.println( "send   heard   is   ok! "+heard);  
                    }    
}          
          catch   (Exception   e)   {
                        System.out.println( "connect   telnet   fail: "   +   host   +   ": "   +
                                                              port   +   e);
                }
}
程序运行调试的时候,我发现程序运行到循环体即while   (!telSocket.isClosed())   内时,第一次收发是正常的,第二次运行到tel_len   =   tel_in.readInt();就跳出异常了显示:java.io.EOFException!!!
我试了一下,如果把向服务端发送心跳确认的这部分代码屏蔽掉,那就可以读取正常了.这是为什么呢???如何能做到收发正常呢???
    谢谢赐教.  


[解决办法]
你这问题我没试过。。
关注中。。
[解决办法]
你得服务端代码呢?

看看那有什么问题


还有
看看
if (tel_len > 4092) {
tel_len = 4092;
}
有没有进入这句话
[解决办法]
当然会出问题,你的循环里面是先读取一个int值,然后再读取byte[]

这就要求,你在那边要先发一个int值,再发一个byte[]这样对应,否则就会出异常的
[解决办法]
blog 更新:
think in java 各章后练习答案.....
http://blog.csdn.net/heimaoxiaozi/

[解决办法]
tel_len = tel_in.readInt();

你上面这句是干什么啊?这一句一次要读入接下来的4个字节,如果你服务端剩余的不够4个字节就会出错。

一般都是定义1024或者更大一些1024倍数的数组,太大浪费内存比较多了。

然后调用read(byte[] b) ,通过这个函数的返回值来判断总共读入了多少字节。然后跟1024比较得到后面还有没有数据。


或者你这种要自己程序里面定义好,服务器开始的地方一次性发送我要送多少字符的数据,然后只在最开始读入总共多少字节,一次4092的话自己算总共要读多少次。或者像你的程序应该是服务器端每隔4092发送一次后面4092字节内还有多少字节会被发送(好像一般不会这么干的,呵呵)


以上。
[解决办法]
up


up