关于网友提出的“ 关于upd 广播 一个节点传送 多个节点接收 的问题 急在线等”问题疑问,本网通过在网上对“ 关于upd 广播 一个节点传送 多个节点接收 的问题 急在线等”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 关于upd 广播 一个节点传送 多个节点接收 的问题 急在线等
描述: udp广播的问题.我建立了一个server.然后2个client.第一次. 2个client 发送数据给server.server能收到数据.server收到数据后发送确认数据.2个client只有最后打开的那个client可以收到.为什么. 下面是代码.在线等.希望大家帮助一下.没写过这个方面东西.第一次写.找了个代码修改修改.不过现在有问题了.比较急.大家帮忙啊.在这里谢谢了.
//server
void Udp_server(void)
{
SOCKET dvrp;
sockaddr_in from_s,bind_s;
WSADATA wsdata;
BOOL optval;
char buf[1024];
WSAStartup(0x0202,&wsdata);
optval=TRUE;
int fromlength=sizeof(SOCKADDR);
//parameter for bind of socket
bind_s.sin_family=AF_INET;
bind_s.sin_addr.s_addr=0;
bind_s.sin_port=htons(5050);
//parameter for receive data
from_s.sin_family=AF_INET;
from_s.sin_addr.s_addr=INADDR_BROADCAST;
from_s.sin_port=htons(5050);
dvrp = socket(AF_INET,SOCK_DGRAM,0);
//bind socket
setsockopt(dvrp,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof(optval));
bind(dvrp,(sockaddr *)&bind_s,sizeof(sockaddr_in));
//receive data from ohter node using broadcast
recvfrom(dvrp,buf,1024,0,(struct sockaddr FAR *)&from_s,(int FAR *)&fromlength);
//receive one time every 0.5 second
Sleep(500);
ZeroMemory(buf,1024);
recvfrom(dvrp,buf,1024,0,(struct sockaddr FAR *)&from_s,(int FAR *)&fromlength);
Sleep(500);
ZeroMemory(buf,1024);
Sleep(2000);
int ret = sendto(dvrp,"return data",1024,0,(sockaddr*)&from_s,sizeof(from_s));
if(ret==SOCKET_ERROR){
cout<<><>
}else{
printf("Send success!\n");
}
}
//client
void Udp_Client(void)
{
SOCKET dvrp_c;
sockaddr_in addrto;
WSADATA wsdata;
char buf[1024];
WSAStartup(0x0202,&wsdata);
dvrp_c=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
//set parameter of socket
addrto.sin_family=AF_INET;
addrto.sin_addr.s_addr=INADDR_BROADCAST;
addrto.sin_port=htons(5050);
bool opt=true;
//set socket to communication
setsockopt(dvrp_c,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt,sizeof(opt));
int nlen=sizeof(addrto);
Sleep(500);
//send cost to server
int ret = sendto(dvrp_c,"Data",1024,0,(sockaddr*)&addrto,nlen);
//if error get error message
if(ret==SOCKET_ERROR){
cout<<><>
}else{
printf("Send success!\n");
}
while(1){
Sleep(500);
ret = recvfrom(dvrp_c,buf,1024,0,(struct sockaddr FAR *)&addrto,(int FAR *)&nlen);
printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
if(ret==SOCKET_ERROR){
int aaa = WSAGetLastError();
printf("System error message: %d\n", aaa);
}else{
printf("Receive success!\n");
}
printf("%s",buf);
ZeroMemory(buf,1024);
}
}
以上介绍了“ 关于upd 广播 一个节点传送 多个节点接收 的问题 急在线等”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3056673.html