小弟最近在编写一个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();