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

📄 cscphysvr.h

📁 一个通讯管理机的源代码。比较好用。推荐
💻 H
字号:
#ifndef CSCPHYSVR_H#define CSCPHYSVR_H/***@author *//*eth0      Link encap:Ethernet  HWaddr 00:E0:4C:4F:BC:FFinet addr:192.168.1.9  Bcast:192.168.1.255  Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:4371 errors:0 dropped:0 overruns:0 frame:0TX packets:4951 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:100RX bytes:2819762 (2.6 Mb)  TX bytes:658194 (642.7 Kb)Interrupt:5 Base address:0x7000*///route add -net 236.8.8.0 netmask 255.255.255.0 dev eth0/*Response #1   30 from FE01A8C0 server: 00  1F  00  1A  0F  00  30  30  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  01  00Response #2   33 from FE01A8C0 server: 00  1F  00  1D  0F  00  30  07  01  00  00  4B  02  00  80  08  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00Response #3   33 from FE01A8C0 server: 00  1F  00  1D  0F  00  30  07  01  00  00  4B  02  00  80  08  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00Response #4   30 from FE01A8C0 server: 00  1F  00  1A  0F  00  30  30  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  01  00Response #5   33 from FE01A8C0 server: 00  1F  00  1D  0F  00  30  07  01  00  00  4B  02  00  80  08  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00Response #6   33 from FE01A8C0 server: 00  1F  00  1D  0F  00  30  07  01  00  00  4B  02  00  80  08  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00* listen.c - An IP multicast client *///dd if=0s2.2.16 of=/dev/hdc#include "msystem.h"class CIPMulticastClient{public:	CIPMulticastClient(int nPort,char * pszHostName)	{		m_nPort = nPort;		strcpy(m_szHostName,pszHostName);	}	bool Init()	{		bool bRet = true;		int loop = 1;		/* 多播循环 *///		int iter = 0;//		int sin_len;		struct sockaddr_in sin;		struct hostent *server_host_name;		if ((server_host_name = gethostbyname(m_szHostName)) == 0)		{			perror("gethostbyname");			return false;		}		if ((socket_descriptor = socket(PF_INET, SOCK_DGRAM, 0)) == -1)		{ 			perror("socket");			return false;		}		/* 调用bind之前,设置套接口选项启用多播IP支持*/		loop = 1;		if (setsockopt(socket_descriptor,SOL_SOCKET, SO_REUSEADDR,&loop,sizeof(loop)) < 0)		{			perror("setsockopt:SO_REUSEADDR");			bRet = false;		}		else		{			/*bzero(&sin, sizeof(sin));*/			memset(&sin, 0, sizeof(sin));			sin.sin_family = AF_INET;			sin.sin_addr.s_addr = htonl(INADDR_ANY);			sin.sin_port = htons(m_nPort);			if(bind(socket_descriptor,(struct sockaddr *)&sin, sizeof(sin)) >= 0)			{				/* 在同一个主机上进行广播设置套接口,				作用是方便单个开发系统上测试多播IP广播 */				loop = 0;//1				if(setsockopt(socket_descriptor,IPPROTO_IP, IP_MULTICAST_LOOP,&loop,sizeof(loop)) >= 0)				{					/* 加入一个广播组。进一步告诉Linux内核,					特定的套接口即将接受广播数据*/					struct ip_mreq command;					command.imr_multiaddr.s_addr = inet_addr(m_szHostName);					command.imr_interface.s_addr = htonl(INADDR_ANY);					if (command.imr_multiaddr.s_addr == (unsigned) -1)					{						perror("236.8.8.8 not a legal multicast address");						bRet =  false;					}					else					{						if (setsockopt(socket_descriptor, IPPROTO_IP, IP_ADD_MEMBERSHIP,&command, sizeof(command)) < 0)						{							perror("setsockopt:IP_ADD_MEMBERSHIP");							bRet =  false;						}					}				}				else				{					perror("setsockopt:IP_MULTICAST_LOOP");					bRet =  false;				}			}			else			{				perror("bind");				bRet =  false;			}		}		if (!bRet)		{			close(socket_descriptor);			socket_descriptor = 0;		}		return bRet;	}	void Destroy()	{		if (socket_descriptor>0)		{			struct ip_mreq command;			command.imr_multiaddr.s_addr = inet_addr(m_szHostName);			command.imr_interface.s_addr = htonl(INADDR_ANY);			setsockopt(socket_descriptor, IPPROTO_IP, IP_DROP_MEMBERSHIP,&command, sizeof(command));			close(socket_descriptor);		}		socket_descriptor = 0;	}	int Recv(DWORD& dwPeerIPAddr,unsigned char* pbyBuf,int nBufSize=1024)	{		int nRecvSize = 0;		if (socket_descriptor>0)		{			struct sockaddr_in sin;			int sin_len = sizeof(sin);			if ((nRecvSize = recvfrom(socket_descriptor, pbyBuf, nBufSize, 0, (struct sockaddr *)&sin, (socklen_t *)&sin_len)) > 0)			{				dwPeerIPAddr = sin.sin_addr.s_addr;//				printf("Response  %d from %x server: ", nRecvSize,dwPeerIPAddr);//				for (int iii=0; iii<nRecvSize; iii++)//					printf("%02X  ", (unsigned char)(pbyBuf[iii]));//				printf("\n");			}		}		else usleep(10000);		return nRecvSize;	}protected:	char m_szHostName[16];	int m_nPort;	int socket_descriptor;};class CIPBreadcastServer{public:	CIPBreadcastServer(int nPort)	{		m_nPort = nPort;	}	bool Init()	{		socket_descriptor = socket(AF_INET, SOCK_DGRAM, 0);		if (socket_descriptor == -1)			return false;		int on=1;		setsockopt(socket_descriptor, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));		return true;	}	bool Write(unsigned char* pbyBuf,int nBufSize,DWORD dwIPAddr)	{		bool bRet = false;		if (socket_descriptor>0)		{			struct sockaddr_in address;			memset(&address, 0, sizeof(address));			address.sin_family = AF_INET;			address.sin_addr.s_addr = dwIPAddr;//inet_addr("236.8.8.8");			address.sin_port = htons(m_nPort);			if (sendto(socket_descriptor, pbyBuf,nBufSize, 0,(struct sockaddr *)&address, sizeof(address)) >= 0)			{/*	cout  << dwIPAddr<<"->{" <<nBufSize << '}';	for (int nnn=0; nnn<nBufSize; nnn++)	{		char c[16];		sprintf(c," %02x ",pbyBuf[nnn]);		cout << c;	}	cout  << endl;*/				bRet = true;			}		}		return bRet;	}	void Destroy()	{		if (socket_descriptor>0)			close(socket_descriptor);		socket_descriptor = 0;	}protected:	int socket_descriptor;	int m_nPort;};class CCSCPhySvr {public:	CCSCPhySvr(int nPort = 1888,char * pszHostName = "236.8.8.8",int nSvrPort=1889);	~CCSCPhySvr();	int Status()//-1:Disconnect,0:Idle,1:Busy	{		if (m_nStatus == -1)			Connect();		return m_nStatus;	}	bool Write(BYTE *pData,WORD wSize,DWORD dwIPAddr = 0x90909ec)	{		bool bRet = false;		if ((Status()==0) && m_server.Write(pData,wSize,dwIPAddr))		{			bRet = true;		}		return bRet;	}	bool Connect() ;	void Disconnect();	bool Reset();	CDQue *GetRecvQueue(int b)	{		return m_pool.GetRecvQueue(b);	}protected:	CIPMulticastClient	m_client;	CIPBreadcastServer	m_server;	int m_nStatus;	pthread_t m_hThread;	CPeerPool	m_pool;	char *m_pszDevName;	friend void *Listen(void *);};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -