zoukankan      html  css  js  c++  java
  • 用UDP协议实现广播通信

    UDP 是USER DATAGRAM PROTOCAL 的简称,是一种在网络上提供的无连接的传输协议。 
    用UDP通信有以下特点: 
    • 1、 数据传输不用建立连接,所以不可靠; 
    • 2、 数据的发送是面向整个网络的,任何一台在局域网内的计算机都可以接收到相同的数据; 
    具体实现很简单,但是现在在网络上很少看到这方面的代码;我也参考了VCKBASE上的关于UDP通信的原代码和一些书籍,写了这个简单的客户端,接收端程序,起到抛砖引玉的作用,希望能给初次接触UDP之BROADCAST编程的同志一些参考。 

    下面就让我来说一下工作流程, 接收端的程序: 启动SOCKET库,版本为2.0 WSAStartup(0x0202,&wsdata);       
    然后赋值给两个地址,一个用来绑定套接字,一个用来从网络上的广播地址接收消息; ......         a.sin_family=AF_INET; a.sin_addr.s_addr=0; a.sin_port=htons(5050); from.sin_family=AF_INET; from.sin_addr.s_addr=INADDR_BROADCAST; from.sin_port=htons(5050); int fromlength=sizeof(SOCKADDR); //用UDP初始化套接字 s=socket(AF_INET,SOCK_DGRAM,0);         //设置该套接字为广播类型, setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof(optval)); //把该套接字绑定在一个具体的地址上         bind(s,(sockaddr *)&a,sizeof(sockaddr_in)); char buf[256]; while(1) { //从广播地址接收消息,注意用来绑定的地址和接收消息的地址是不一样的 recvfrom(s,buf,256,0,(struct sockaddr FAR *)&from,(int FAR *)&fromlength); Sleep(2000); printf("%s\n",buf); ZeroMemory(buf,256); }         .....       
    无连接协议不用LISTEN也不用ACCEPT,他直接从广播地址上接收消息,但我们必须要设置该套接字为广播类型。 
    发送端的程序比较简单,只要将发送地址改为广播地址,设置套接字为BROADCAST类型就行,具体实现细节请参见源代码。 
    在VC6。0 WIN 2000下运行通过。
  • 相关阅读:
    SuperMap房产测绘成果管理平台
    SuperMap产权登记管理平台
    Android adb shell am 的用法(1)
    由浅入深谈Perl中的排序
    Android 内存监测和分析工具
    Android 网络通信
    adb server is out of date. killing...
    引导页使用ViewPager遇到OutofMemoryError的解决方案
    adb logcat 详解
    How to send mail by java mail in Android uiautomator testing?
  • 原文地址:https://www.cnblogs.com/qq78292959/p/2077109.html
Copyright © 2011-2022 走看看