日期:2014-05-20  浏览次数:20720 次

关于java写的client与C写的server端的通信问题,紧急求助!

小弟最近在编写一个java的client端,需要实时的与server端连接获得数据。server端采用的是长连接的方式,client端连上后,server端不会主动断开。

代码如下,通过如下代码的实现java编写的client端连接后时常会出现client端收不到数据的情况,最后到超时退出抛出异常。通过观察server段的日志和通过其他调试工具收发包的测试,server端收到请求后确实返回了数据,但不知道为什么Java编写的client端就是会出现时常收不到包的情况。请大家帮忙,分不够可以加。

不是收不到,而是有的时候收不到,大概50%的机会收不到数据,socket一直处于read的状态,最后到超时退出,由于server端是产品,封闭的,所以只能在client端想办法,请大家救命啦!

大家可以帮忙说说以前做的类似的java的client到c的server端通讯中出现的问题如何解决的。


代码如下:


            public   String   socketSend(String   strIp,   int   iPort,int   iTimeOut,   String   cmdStr)
            throws   java.net.SocketException,java.net.UnknownHostException,java.io.IOException,Exception
            {
            String   str= " ";
                if(cmdStr==null){
                            return   null;
                }
                java.net.Socket   skt   =   null;  
                try
{
                        skt   =   new   java.net.Socket(strIp,iPort);
}catch(Exception   e)
{
return   "create   false ";
}
                skt.setSoTimeout(   iTimeOut   );

            InputStream   stream_In   =   null;
            OutputStream   stream_Out   =   null;
            DataInputStream   isr   =   null;
            String   strResult     =   " ";

            stream_In   =   skt.getInputStream();
            stream_Out   =   skt.getOutputStream();
            isr   =   new   DataInputStream(stream_In);
   
            /*send   the   Data   to   the   server*/
            PrintWriter   writeBuf   =   new   PrintWriter(stream_Out,   true);
            writeBuf.print( "ZRC       ZRS       000804000&& ");
            writeBuf.flush();
           
            int   icount   =   0;
            try
    {
            while   (icount <3)
            {    
                byte[]   tmpbuff;
                tmpbuff   =   new   byte[1024];
                isr.read(tmpbuff,   0,   1024);
                String   strTmp   =   new   String(tmpbuff);
                strResult     =   strResult   +   strTmp.trim();