| 发表于:2007-09-21 22:06:03 楼主 |
很怪啊 我发一个消息一个机子,那个机子收到了,但是它给我发时,我却收不到。我们是在区域网的,默认网关是一样的。我的是广播技术。 //发送 wsadata wsadata; //指向winsocket信息结构的指针 socket socklistener; sockaddr_in sin,saudpserv; bool fbroadcast=true; char sendbuff[1024]; int nsize; int ncount=0; if(wsastartup(makeword(2,2),&wsadata)!=0)//进行winsocket的初始化 { printf( "can 't initiates windows socket!program stop.\n ");//初始化失败返回-1 return -1; } socklistener=socket(af_inet,sock_dgram,0); if(setsockopt(socklistener,sol_socket,so_broadcast, (char *)&fbroadcast,sizeof(bool))==socket_error) { printf( "broadcast set error is %d ",wsagetlasterror()); wsacleanup(); return -1; } sin.sin_family=af_inet; sin.sin_port =htons(5000); sin.sin_addr.s_addr = htonl(inaddr_any); if(bind(socklistener, (sockaddr *)&sin, sizeof(sin))!=0) { printf( "can 't bind socket to local port!program stop.\n ");//初始化失败返回-1 return -1; } saudpserv.sin_family=af_inet; saudpserv.sin_addr.s_addr=htonl(inaddr_broadcast); saudpserv.sin_port=htons(7001);//发送用的端口,可以根据需要更改 nsize=sizeof(sockaddr_in); while(ncount <15) { sprintf(sendbuff, "message %d ",ncount++); sendto(socklistener,sendbuff, lstrlen(sendbuff), 0, (sockaddr *) &saudpserv, sizeof(sockaddr_in)); printf( "%s\n ",sendbuff); } getchar(); //接受 wsadata wsadata; //指向winsocket信息结构的指针 socket socklistener; sockaddr_in sin,saclient; char crecvbuff[1024]; int nsize,nbsize; int iaddrlen=sizeof(saclient); if(wsastartup(makeword(2,2),&wsadata)!=0)//进行winsocket的初始化 { printf( "can 't initiates windows socket!program stop.\n ");//初始化失败返回-1 return -1; } socklistener=socket(af_inet, sock_dgram,0); sin.sin_family=af_inet; sin.sin_port=htons(7001);//发送端使用的发送端口,可以根据需要更改 sin.sin_addr.s_addr =htonl(inaddr_any); if(bind(socklistener, (sockaddr far *)&sin, sizeof(sin))!=0) { printf( "can 't bind socket to local port!program stop.\n ");//初始化失败返回-1 return -1; } while(1) { nsize=sizeof(sockaddr_in); if((nbsize=recvfrom(socklistener,crecvbuff,1024,0, (sockaddr far *) &saclient,&nsize))==socket_error) { printf( "recive error "); break; } crecvbuff[nbsize]= '\0 '; printf( "sender ip:%s\n ",inet_ntoa(saclient.sin_addr)); printf( "%s\n ",crecvbuff); } |
|
|
|
|