源代码是在网上找到的。自己做了一点修改。可以用作Broadcast UDP Socket。
编译链接完成后的可执行程序名例为:testudp
使用方法:testudp 90.0.1.33
//(与90.0.1.33链接通信)
testudp 90.0.1.255 //(向90.0.1. 网段的所有机器广播数据)
注意:程序中的变量‘opt’需为‘int’型,不能是‘bool’型,否则在Linux下无法做Broadcast。
//#include
#ifdef WIN32
#include "winsock2.h"
#pragma comment(lib,
"wsock32.lib")
//#pragma comment(lib,
"ws_32")
#else
#include
#include
#endif //#ifdef WIN32
//#include
//#include
#include
//#include
//#include
//#include
#include
#include
using namespace std;
void sig_handle(int signum)
{
return;
}
int main(int argc,char *argv[])
{
char
buffer[512];
int
bordcast_socket;
int
read_count=0;
int
addr_len=sizeof(struct sockaddr);
struct
sockaddr_in
addr_info,addr_net;
int
opt=1;
if(argc!=2)
{
printf("Use page boradcast
address>\n");
return -1;
}
#ifdef WIN32
WSADATA
wsd;
int
err;
err =
WSAStartup(MAKEWORD(2,2),&wsd);
#endif //#ifdef WIN32
addr_info.sin_family=AF_INET;
addr_info.sin_addr.s_addr=inet_addr(argv[1]);
addr_info.sin_port=htons(1500);
bordcast_socket=socket(AF_INET,SOCK_DGRAM,0); //
IPPROTO_UDP
if(bordcast_socket<0)
{
cout << bordcast_socket
<< endl;
perror("bordcast_socket");
return -1;
}
//signal(SIGALRM,sig_handle);
setsockopt(bordcast_socket,SOL_SOCKET,SO_BROADCAST,(const
char*)&opt,sizeof(opt));
while(fgets(buffer,sizeof(buffer),stdin)!=NULL)
{
sendto(bordcast_socket,buffer,strlen(buffer),0,(struct sockaddr
*)&addr_info,addr_len);
//alarm(5);
memset(buffer,0,sizeof(buffer));
// for (; ; )
//{
//
read_count=0;//recvfrom(bordcast_socket,buffer,sizeof(buffer),0,(struct
sockaddr
*)&addr_net,&addr_len);
// if(read_count<0
&&
errno==EINTR)
// {
//
continue;
// }
// else
//{
//
printf("from
%s\n",inet_ntoa(addr_net.sin_addr));
// }
//}
}
#ifdef WIN32
WSACleanup();
#endif //#ifdef WIN32
return
0;
}