📄 ip_brocast.cpp
字号:
#include<winsock2.h>
#pragma comment(lib,"WS2_32")
#include<stdio.h>
DWORD WINAPI fun1(LPVOID lpParameter);
DWORD WINAPI fun2(LPVOID lpParameter);//定义两个供线程使用的函数
SOCKET s;
SOCKET s1;BOOL bReuse = TRUE;
char sz[256];
SOCKADDR_IN addrRemote;
SOCKADDR_IN bcast;
SOCKADDR_IN sin2;SOCKADDR_IN sin;
int nLen=sizeof(addrRemote);
void main()
{
HANDLE hThread1;
HANDLE hThread2;
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup( );
return;
}
/////////////////////////////////////////////////发送程序段
//////////////////////////////////////////////////接收程序段
s=::socket(AF_INET,SOCK_DGRAM,0);
::setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char*)&bReuse, sizeof(BOOL));
sin.sin_family=AF_INET;
sin.sin_addr.S_un.S_addr=INADDR_ANY;
sin.sin_port=htons(4578);///////////////////////////////同一台机上会出现如果是绑定同一端口号的就只能打开一个接收的,在不同机上也会吗?
if(::bind(s,(sockaddr*)&sin,sizeof(sin))==SOCKET_ERROR)
{
printf("bind() failed\n");
return;
}
//////////////////////////////////////////////////////
printf("开始向4578端口发送/向4567端口接收广播数据...\n \n");
hThread2=CreateThread(NULL,0,fun2,NULL,0,NULL);
hThread1=CreateThread(NULL,0,fun1,NULL,0,NULL);
CloseHandle(hThread2);
CloseHandle(hThread1);
Sleep(INFINITE);
//////////////////////////////////////////////////////
}
DWORD WINAPI fun2(LPVOID lpParameter)
{
//int nLen=sizeof(addrRemote);
while(1)
{
int nRet=::recvfrom(s,sz,256,0,(sockaddr*)&addrRemote,&nLen);
if(nRet>0)
{
sz[nRet]='\0';
char *re=inet_ntoa(addrRemote.sin_addr);
strcat(re,":");
strcat(re,sz);
printf(re);
printf("\n");
}
}return 0;
}
DWORD WINAPI fun1(LPVOID lpParameter)
{ s1=::socket(AF_INET,SOCK_DGRAM,0);
BOOL bBroadcast=TRUE;
::setsockopt(s1,SOL_SOCKET,SO_BROADCAST,(char*)&bBroadcast,sizeof(BOOL));
bcast.sin_family=AF_INET;
bcast.sin_addr.s_addr=INADDR_BROADCAST;
bcast.sin_port=htons(4567);
while(1)
{
gets(sz);
::sendto(s1,sz,strlen(sz),0,(sockaddr*)&bcast,sizeof(bcast));
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -