调皮的udp组播技术

 2017年本科毕业,经历过千辛万苦的找工作之后,我进入了现在的这家公司。虽是职场小白,但励志成为IT界的一股清流(毕竟开发的妹子少,哈哈)。因为公司的业务需要,我负责的部分是利用组播技术实现OSG模型的多人协同操作,简单来说就是,在n个多播组中,无论任何一个成员操作模型,其所在组内的其他成员的模型也会随之改变。   

  udp技术就不多说了,度娘都有,我的理解就是一对多的通信模式。我采用的是C/S架构,客户端和服务器不再是傻瓜式的收-发-收-发模式,而是像我们日常用QQ群、微信群一样,一方可以毫无顾忌的发送消息(传说中的索命连环call),也可以接受到其他成员的,部分核心代码如下:

  客户端加入到多播组:

复制代码
 1 #define PORT 9999 2 #define BUF_SIZE 1024 3  4 int main()  5  {  6      WSADATA wsaData;  7      if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)  8      {  9          cout << "Failed to load Winsock dll" << WSAGetLastError(); 10      } 11 12      SOCKET clientSock = socket(AF_INET, SOCK_DGRAM, 0);//创建套接字13      if (clientSock == INVALID_SOCKET) 14      { 15          cout << "socket()Failed:" << WSAGetLastError(); 16      } 17 18      sockaddr_in servAddr;//地址信息19      memset(&servAddr, 0, sizeof(servAddr)); 20      servAddr.sin_addr.s_addr = inet_addr("192.168.0.121"); 21      servAddr.sin_family = AF_INET; servAddr.sin_port = htons(PORT); 22      int len = sizeof(servAddr); 23      char sendBuf[BUF_SIZE] = { 0 };//缓冲区初始化为024 25      if (sendto(clientSock, sendBuf, BUF_SIZE, 0, (sockaddr*)&servAddr, len) == SOCKET_ERROR) 26      { 27          cout << "send failed ,error is:" << WSAGetLastError() << endl; 28      } 29      else30      { 31          cout << "send successfully:" << sendBuf << endl; 32      } 33 34      //加入到多播组 35      bool loop = 1; 36      if (setsockopt(clientSock, IPPROTO_IP, IP_MULTICAST_LOOP, reinterpret_cast<char FAR *>(&loop), sizeof(loop)) < 0) 37      { 38          cout << "set sock error" << endl; 

                    
                
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信