我想实现以下功能:服务器每1秒钟发送一次数据,客户端读取数据进行处理。
   大体实现如下:
   服务器端:
SOCKET g_hsocket;
sockaddr_in sa_addr;
settimer(2,1000,0);
ontimer()
{
 .......//socket的一些设定,UDP方式
g_hsocket=socket(AF_INET,SOCK_DGRAM,0);
bind();
////////////////启动一个线程发送数据
AfxBeginThread(sendData,this,THREAD_PRIORITY_NORMAL);
}void sendData()
{
char buff[6];
int iLength=recvfrom(g_hsocket,buff,0,(sockaddr*)&sa_addr,&(sizeof(sa_addr));//问题1:此处的recvfrom()是必须的吗?int n=sendto(g_hsocket,.......);
close(g_hsocket);
}
客户端:
客户端和服务器端基本一样,也是启动一个新线程,读取数据
........................
AfxBeginThread(getData,......);
..........................void getData()
{
while(1)
{
sendto();//问题 此处的sendto()是必要的吗?
...........
recvfrom();
..........
}
其他问题:
1、我用的是阻塞模式吗?
2、使用ontimer()函数的时候,我所启动的线程什么时候销毁,是1秒销毁一次吗?
3、我这样写可以实现想要的功能吗?
   

解决方案 »

  1.   

    ontimer()
    {
    ........
    afxbeginthread();
    ....................
    //////在此处销毁吗吗,还是别的地方
    ontimer();
    }
      

  2.   

    int  sendData() 

    char buff[6]; 
    int iLength=recvfrom(g_hsocket,buff,0,(sockaddr*)&sa_addr,&(sizeof(sa_addr));//问题1:此处的recvfrom()是必须的吗? int n=sendto(g_hsocket,.......); 
    close(g_hsocket); 
    return 100;
    } 这样吗?
      

  3.   

    在你的线程函数 sendData() 返回以后销毁
      

  4.   

    return 100; 以后,线程就结束了
      

  5.   

    int  sendData() 

    char buff[6]; 
    int iLength=recvfrom(g_hsocket,buff,0,(sockaddr*)&sa_addr,&(sizeof(sa_addr));//问题1:此处的recvfrom()是必须的吗? int n=sendto(g_hsocket,.......); 
    close(g_hsocket); 
    return 100; 

    在sendto()之前,有一个recvfrom()。我的程序里,好像如果没有这个recvfrom(),就发送不了数据啊不知道是为什么
      

  6.   

    recvfrom 是阻塞的,如果收不到内容,又没有设置超时,那它会一直在这等,除非SOCKET不可用了。