public void CreateConnection() throws Exception {   
        try {   
            socket = new Socket(ip, port);   
        } catch (Exception e) {   
            e.printStackTrace();   
            if (socket != null)   
                socket.close();   
            throw e;   
        } finally {   
        }   
    }   
    public void sendMessage(String sendMessage) throws Exception {   
        try {   
            out = new DataOutputStream(socket.getOutputStream());   
             out.write( sendMessage.getBytes() );          
        } catch (Exception e) {   
         //System.out.println("www..eeeeeee.....");
            e.printStackTrace();   
            if (out != null)   
                out.close();   
            throw e;   
        } finally {   
        }   
    }   
    public DataInputStream getMessageStream() throws Exception {   
        try {   
         getMessageStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));   
         return getMessageStream;   
        } catch (Exception e) {   
            e.printStackTrace();   
            if (getMessageStream != null)   
                getMessageStream.close();   
            throw e;   
        } finally {   
        }   
    } 
我把tcp接收发送写成了javabean,然后其他地方调用的是:
try{
ClientSocket1.IpSocket("192.168.5.244",8888);
ClientSocket1.CreateConnection();
ClientSocket1.sendMessage(Message);
for(int tt=0;tt<4;tt++)
{
isdata=ClientSocket1.getMessageStream_cx();
}
ClientSocket1.shutDownConnection();
}
catch(Exception e){
System.out.println("YUYUYUYUYUYUYUYUYUYUYUY");
}
现在我只能收到2包数据,然后就直接从异常里面出来了,对java下面的tcp没有研究,谁能帮助一下啊

解决方案 »

  1.   

    Exception:java.io.EOFException是这个异常?为什么啊 
      

  2.   

    catch (Exception e) 

    System.out.println("Exception:"+e.toString()); 
    }
    异常:Exception:java.io.EOFException
      

  3.   


    java.io.EOFException
    at java.io.DataInputStream.readByte(Unknown Source)
    at com.ClientSocket.getMessageStream_cx(ClientSocket.java:126)
    at org.apache.jsp.Cj9011_005flldata_jsp._jspService(Cj9011_005flldata_jsp.java:147)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Unknown Source)具体的错误
      

  4.   

    发现是接收的地方有问题
    for ( i = 0; i < 24; i++) {
            //if(getMessageStream.read()!=-1)
          mapArray[i] = getMessageStream.readByte();
          }
    使用了readByte就会出现异常,我在上面加了判断,还是一样,但是我如果封掉readbyte 的话,程序是能正常接收多包数据?
    如果不用readbyte我该怎么来保存得到的数据呢???
      

  5.   

    呵呵,问题继续深入了,使用:
    BufferedReader   socketReader   =   new   BufferedReader(new   InputStreamReader(socket.getInputStream())); 
             String   recvMsg   =   socketReader.readLine(); 
    打印出来的数据,c服务程序下面发过来的多包程序,他一下子都打印出来了,说明他一下子全收过来了,所以当我多次去执行接受的时候,收不到数据了,所以出现异常?如果按我的理解,我就有疑问了?不是分多个包发过来的吗?那怎么来区别,还是程序上有那些要注意的地方
      

  6.   

    如果是一个数据流就能收全的话也有问题,我数据量小的话,我是能处理的,但如果是大数量量的话,这样是不是有问题??
    java socket下面没有多包概念?
      

  7.   

    发现是接收的地方有问题
    for ( i = 0; i < 24; i++) {
    //if(getMessageStream.read()!=-1)
    mapArray[i] = getMessageStream.readByte();
    }