我编写了一个SOCKET编程TCP客服端程序,与我们的ARM通信,运行不到5分钟就会死掉。我用的是WHILE(1)死循环,应该不会死掉的。但是死掉啦,不论我是直接运行.EXE文件,还是调试运行。都一样死掉。TCP客服端程序,是个可以收发的程序,刚好与我们的ARM通信,通信是正常的。就是死掉啦。但是我们的ARM作为TCP服务器没有死掉,可以进行下次连接和通信的。
以下是提示信息:
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ws2_32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\secur32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ws2help.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mswsock.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\hnetcfg.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\lpk.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\usp10.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\wshtcpip.dll', no matching symbolic information found.
The thread 0x13F8 has exited with code -1073741510 (0xC000013A).
The thread 0x15D0 has exited with code -1073741510 (0xC000013A).
The program 'F:\IC_Test\TcpClient\Debug\TcpClient.exe' has exited with code -1073741510 (0xC000013A).
下面是while(1)代码:
while(1){
 
    
        i++;
        if(i<8)
        {
        delayus(500);
        sprintf(s,"%d",i);
        send(sockClient,s,strlen(s)+1,0);//必须strlen(s)+1这个+1必须要写上,结束符的占一个字节
        recv(sockClient,recvBuf,100,0);
        printf("%s\n",recvBuf); 
        }
        if((i<16)&(i>8))
        {
        delayus(8000);
        sprintf(s,"%d",i);
        send(sockClient,s,strlen(s)+1,0);//必须strlen(s)+1这个+1必须要写上,结束符的占一个字节
        recv(sockClient,recvBuf,100,0);   
        printf("%s\n",recvBuf);
        }
      
         
        if(i>16)
        {
            delayus(50000);
            i=0;
        }
        
    }
代码里面的delayus()是可以精确定时的US级的延时函数
代码如下:
void delayus(long int microsecond) //以微秒延时函数
{   _LARGE_INTEGER litmp;
    LONGLONG QPart;
    double dfFreq;
 LONGLONG dfTim; 
    
 QueryPerformanceFrequency(&litmp);
    dfFreq = (double)litmp.QuadPart / 1e6 ; // 获得计数器的时钟频率,以微秒为单位
    QueryPerformanceCounter(&litmp);
    QPart = litmp.QuadPart;         // 获得时间初始值
    do {
          QueryPerformanceCounter(&litmp);
          dfTim = (long int)((double)(litmp.QuadPart-QPart) / dfFreq) ;    // 获得对应的时间值,单位为微秒
       }while(dfTim< microsecond);          
 return ;
}谢谢专家给点提示。我不知道为什么运行一段时间就死掉啦?小弟谢谢您!
网络SOCKET编程,精确延时通信。

解决方案 »

  1.   

    if((i<16)&(i>8))if((i<16)&&(i>8))
      

  2.   

    太费劲了
    if (i < 8)
    ...
    else if (i < 16)
    ...
    else
    ...
    sprintf(s,"%d",i);
    printf("%s\n", s);
    send(sockClient,s,strlen(s)+1,0);//必须strlen(s)+1这个+1必须要写上,结束符的占一个字节
    recv(sockClient,recvBuf,100,0);   
    printf("%s\n",recvBuf);另外,判断send和recv的返回值
      

  3.   

    这有socket例子,你找一个试试:
    http://download.csdn.net/detail/geoff08zhang/4571358