⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ip_brocast.cpp

📁 局域网广播代码
💻 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 + -