Linux多播技術的使用和編程

綱要:   多播技術(Multicast)經常用來編制分佈式的聊天、流體音頻,和視頻等等應用 程序。在Linux中使用多播技術,與使用UDP給單個用戶發送消息,沒有多大的區別,只 是你要使用一個特殊的多播IP地址,還有一些環境須要改變一下。 正文:                          Linux多播技術的使用和編程 做者:stone   多播技術(Multicast)經常用來編制分佈式的聊天、流體音頻,和視頻等等應用程 序。在Linux中使用多播技術,與使用UDP給單個用戶發送消息,沒有多大的區別,只是 你要使用一個特殊的多播IP地址,還有一些環境須要改變一下。   通常的網卡,都是支持多播技術的,可是操做系統不必定。Linux通常在缺省狀態編 譯時,可能都不支持Multicast,你須要重新配置和編譯你的內核,使它支持多播,而後 你須要使用相似這樣的命令: route add -net 224.0.0.0 netmask 240.0.0.0 dev lo   要編譯和配置內核,只是在配置的網絡部分選項中選中:enable multicast ip,然 後編譯,編輯lilo的配置文件lilo.conf,就能夠搞定。   在使用多播技術時,除了一般使用的socket函數外,還須要使用getsockopt()和se tsockopt() 來支持multicast。你能夠運行「man multicast」,看看它的各類選項。編 制多播的程序,也分爲兩方面,一個是broadcast data的服務程序,另外一個是監聽mult icast ip 廣播數據的客戶端程序。   服務程序的編制和普通UDP服務程序的編制同樣,只是在你的sockaddr_in結構的初 始化時,賦值給它的sin_addr。s_addr使用inet_addr("224.0.0.1")給一個特殊的Muti cast IP值就能夠了。   在客戶端的編制方面,相對複雜一點。通常咱們須要先使用gethostbyname,獲得服 務器的信息。而後使用socket(AF_INET,SOCK_DGRAM,0)創建套接字,咱們接着調用 set sockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&share,sizeof(share)),其中,char shar e = 1, sockfd是socket創建的套接字,這一步就是容許了多進程共享同一個端口。接着 ,是通用的bzero(), 給sockaddr_in填入信息,bind(),下來,咱們要通知Linux kerne l來的數據是廣播數據,這一步經過給optval付值來搞定,如 optval.imr_multiaddr.s _addr = inet_addr("224.0.0.1"); optval.imr_interface.s_addr = htonl(INADDR_A NY); 先面的這一步,則用來使本身的主機加入一個廣播組: setsockopt(sockfd, IPP ROTO_IP, IP_ADD_MEMBERSHIP, &optval, sizeof(command)); 如今,你可使用recvf rom()來接收多播數據了,固然,最後你還要使用: setsockopt(sockfd, IPPROTO_IP, IP_DROP_MEMBERSHIP, &optval, sizeof(optval)); 來退出多播組。
相關文章
相關標籤/搜索