我想实现以下功能:服务器每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、我这样写可以实现想要的功能吗?
大体实现如下:
服务器端:
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、我这样写可以实现想要的功能吗?
{
........
afxbeginthread();
....................
//////在此处销毁吗吗,还是别的地方
ontimer();
}
{
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;
} 这样吗?
{
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(),就发送不了数据啊不知道是为什么