程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 用UDP協議實現廣播通信

用UDP協議實現廣播通信

編輯:關於C語言

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
",buf);

		ZeroMemory(buf,256);

	}

         .....

      
無連接協議不用LISTEN也不用ACCEPT,他直接從廣播地址上接收消息,但我們必須要設置該套接字為廣播類型。
發送端的程序比較簡單,只要將發送地址改為廣播地址,設置套接字為BROADCAST類型就行,具體實現細節請參見源代碼。
在VC6。0 WIN 2000下運行通過。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved