1. 程式人生 > >IP多播技術及其程式設計

IP多播技術及其程式設計

IP多播(也稱多址廣播或組播)技術,是一種允許一臺或多臺主機(多播源)傳送單一資料包到多臺主機(一次的,同時的)的TCP/IP網路技術。多播作為一點對多點的通訊,是節省網路頻寬的有效方法之一。在網路音訊/視訊廣播的應用中,當需要將一個節點的訊號傳送到多個節點時,無論是採用重複點對點通訊方式,還是採用廣播方式,都會嚴重浪費網路頻寬,只有多播才是最好的選擇。多播能使一個或多個多播源只把資料包傳送給特定的多播組,而只有加入該多播組的主機才能接收到資料包。目前,IP多播技術被廣泛應用在網路音訊/視訊廣播、AOD/VOD、網路視訊會議、多媒體遠端教育、“push”技術(如股票行情等)和虛擬現實遊戲等方面。

  一、IP多播技術簡介

  1.IP多播地址和多播組
  IP多播通訊必須依賴於IP多播地址,在IPv4中它是一個D類IP地址,範圍從224.0.0.0到239.255.255.255,並被劃分為區域性連結多播地址、預留多播地址和管理許可權多播地址三類。其中,區域性連結多播地址範圍在224.0.0.0~224.0.0.255,這是為路由協議和其它用途保留的地址,路由器並不轉發屬於此範圍的IP包;預留多播地址為224.0.1.0~238.255.255.255,可用於全球範圍(如Internet)或網路協議;管理許可權多播地址為239.0.0.0~239.255.255.255,可供組織內部使用,類似於私有IP地址,不能用於Internet,可限制多播範圍。

  使用同一個IP多播地址接收多播資料包的所有主機構成了一個主機組,也稱為多播組。一個多播組的成員是隨時變動的,一臺主機可以隨時加入或離開多播組,多播組成員的數目和所在的地理位置也不受限制,一臺主機也可以屬於幾個多播組。此外,不屬於某一個多播組的主機也可以向該多播組傳送資料包。

  2.IP多播技術的硬體支援
  要實現IP多播通訊,要求介於多播源和接收者之間的路由器、集線器、交換機以及主機均需支援IP多播。目前,IP多播技術已得到硬體、軟體廠商的廣泛支援。

  (1)主機
  支援IP多播通訊的平臺包括Windows CE 2.1、Windows 95、Windows 98、Windows NT 4和Windows 2000等,執行這些作業系統的主機都可以進行IP多播通訊。此外,新生產的網絡卡也幾乎都提供了對IP多播的支援。
  (2)集線器和交換機
  目前大多數集線器、交換機只是簡單地把多播資料當成廣播來發送接收,但一些中、高檔交換機提供了對IP多播的支援。例如,在3COM SuperStack 3 Swith 3300交換機上可啟用802.1p或IGMP多播過濾功能,只為已偵測到IGMP資料包的埠轉發多播資料包。
  (3)路由器
  多播通訊要求多播源節點和目的節點之間的所有路由器必須提供對Internet組管理協議(IGMP)、多播路由協議(如PIM、DVMRP等)的支援。

  當一臺主機欲加入某個多播組時,會發出“主機成員報告”的IGMP訊息通知多播路由器。當多播路由器接收到發給那個多播組的資料時,便會將其轉發給所有的多播主機。多播路由器還會週期性地發出“主機成員查詢”的IGMP訊息,向子網查詢多播主機,若發現某個多播組已沒有任何成員,則停止轉發該多播組的資料。此外,當支援IGMP v2的主機(如Windows 98/2000計算機)退出某個多播組時,還會向路由器傳送一條“離開組”的IGMP訊息,以通知路由器停止轉發該多播組的資料。但只有當子網上所有主機都退出某個多播組時,路由器才會停止向該子網轉發該多播組的資料。

  使用多播路由協議,路由器可建立起從多播源節點到所有目的節點的多播路由表,從而實現在子網間轉發多播資料包。例如,PIM(協議獨立多播)就是一種多播路由協議,它有兩種型別:稀疏模式(sparse-mode)和密集模式(dense-mode)。以Cisco 2621路由器為例,啟用IP多播轉發功能的基本設定如下:

  c2621(config)# ip multicast-routing 啟動IP多播,使路由器成為一個多播路由器
  c2621(config)# int f0/0 配置快速乙太網埠0
  c2621(config-if)# ip pim dense-mode(或sparse-mode)啟動PIM,同時啟用IGMP協議
  c2621(config-if)# int f0/1 配置快速乙太網埠1
  c2621(config-if)# ip pim dense-mode(或sparse-mode)

  二、IP多播應用的程式設計方法

  在實際應用中,程式設計人員通常需要自己編制底層網路應用程式來實現網上的底層通訊,如具體實現IP多播通訊的功能。編制底層網路應用程式通常要藉助於網路資料通訊程式設計介面,而在不同的作業系統中所提供的網路程式設計介面是有所不同的,如在Microsoft Windows環境下的網路程式設計介面就是Windows套接字(Windows Socket,簡稱Winsock)。
Winsock提供了包括TCP/IP、IPX等多種通訊協議下的程式設計介面。不同的Windows版本支援不同的Winsock版本,其中Windows 95等早期版本本身只支援Winsock1.1(16位)下的程式設計(可以通過安裝相關的軟體包使其支援Winsock2.0),而Windows98、Windows NT4.0、Windows 2000則直接支援Winsock2.0(32位)。Winsock2.0是Winsock1.1的擴充套件,除相容Winsock1.1 API外,還定義了一套可支援IP多播的與協議無關的API。

  使用Winsock 2.0實現IP多播的一般步驟如下:

  1.初始化Winsock資源
  在使用Winsock之前,必須呼叫WSAStartup()函式初始化Windows Sockets DLL。它允許應用程式或DLL指定Windows Sockets API要求的版本。

  2.建立套接字
  呼叫WSASocket()函式可以建立一個使用UDP協議的套接字,它是加入多播組的初始化套接字,並且以後資料的傳送和接收都在該套接字上進行。針對IP多播通訊,可將引數dwFlags設定為WSA_FLAG_MULTIPOINT_C_LEAF、WSA_FLAG_MULTIPOINT_D_LEAF和WSA_FLAG_OVERLAPPED的位和,指明IP多播通訊在控制層面和資料層面都是“無根的”,只存在葉節點,它們可以任意加入一個多播組,而且從一個葉節點發送的資料會傳送到每一個葉節點(包括它自己);建立的套接字具有重疊屬性。

  3.設定套接字的選項
  呼叫setsockopt()函式為套接字設定SO_REUSEADDR選項,以允許套接字綁紮到一個已在使用的地址上。

  4.繫結套接字
  呼叫bind()函式繫結套接字,從而將建立好的套接字與本地地址和本地埠聯絡起來。對於多播通訊來說,傳送和接收資料通常採用同一個埠。

  5.設定多播套接字的模式
  WSAIoctl()函式的命令碼SIO_MULTICAST_LOOP用來允許或禁止多播通訊時傳送出去的通訊流量是否也能夠在同一個套接字上被接收(即多播返回)。值得注意的是,在Windows 95/98/NT 4中,預設是允許多播返回,但不能設定禁止,否則會出錯;只有在Windows 2000以上版本中,才能設定允許/禁止多播返回。
  WSAIoctl()函式的命令碼SIO_MULTICAST_SCOPE用來設定多播傳播的範圍,即生存時間TTL。每當多播路由器轉發多播資料包時,資料包中的TTL值都會被減1,若資料包的TTL減少到0,則路由器將拋棄該資料包。TTL的值是多少,多播資料便最多能經過多少個多播路由器。例如,TTL值為0,則多播只能在本地主機的多個套接字間傳播,而不能傳播到“網線”上;TTL值為1(預設值),則多播資料遇到第一個路由器,便會被它“無情”地丟棄,不允許傳出本地網路之外,即只有同一個網路內的多播組成員才能收到多播資料。

  6.加入一個多播組
  呼叫WSAJoinLeaf()函式可加入一個多播組並指定角色(傳送者/接收者)。呼叫時,引數dwFlags可指定套接字作為傳送者(JL_SENDER_ONLY)、接收者(JL_RECEIVER_ONLY)或身兼兩者(JL_BOTH)。呼叫成功後會返回一個多播套接字,呼叫closesocket()函式關閉該套接字就離開了多播組,此時可以呼叫WSAJoinLeaf()函式再次加入多播組。注意,對多播組資料的接收和傳送不能在該套接字上完成。

  7.向多播組傳送資料
  呼叫sendto()函式,可在指定的UDP套接字上向指定的多播組傳送多播資料。呼叫時,引數to應指向多播組的IP地址。值得注意的是,若一個應用程式只是打算給多播組傳送資料,便不必加入一個多播組。

  8.等待事件
  呼叫WSAAsyncSelect()函式,使套接字置於非阻塞模式,這時應用程式就可在該套接字上接收以Windows訊息為基礎的網路事件通知。例如,若引數lEvent值為FD_READ,則應用程式可在套接字上接收到“資料正等待被讀入”的通知。
  9.從多播組接收資料
  呼叫recvfrom函式,可在指定的UDP套接字上讀取輸入資料。多播通訊中資料的傳送與接收一般採用同一個埠,因此其傳送套接字和接收套接字是一樣的。

  10.關閉套接字,釋放Winsock資源。
  在多播通訊結束後,先呼叫closesocket()函式關閉多播套接字和UDP套接字,然後呼叫WSACleanup()函式結束對Windows Sockets DLL的使用。

  三、應用例項


  為了說明IP多播技術的應用方法,本人在Visual C++.net環境下設計了一個簡單的基於Windows Socket 2的IP多播應用程式,通過該例子讀者可以掌握IP多播應用程式設計的一般方法。該程式的具體設計方法如下:

  1.在Visual Studio.NET中建立一個基於對話方塊的MFC專案CMulticastSocket。注意在“高階功能”設定中不要選擇“Windows套接字”,這是因為MFC只支援Windows Socket 1而不支援Windows Socket 2。為了能使用Winsock 2 API程式設計,在程式中應包含“winsock2.h”標頭檔案,並在專案中加入ws2_32.lib的靜態庫,該靜態庫應設定在專案屬性的“連結器”/“輸入”/“附加依賴項”中。

  2.在對話方塊(類名CCMulticastSocketDlg)資源中,設定它的Caption為“WinSock 2多播應用程式”,並新增以下控制元件:

  靜態文字:Caption為“接收到的資訊:”;
  編輯框:ID為IDC_RECEIVE_EDIT,Read Only、Auto Vscroll、Vertical Scroll和Multiline屬性值都為True
  靜態文字:Caption為“傳送的資訊:”
  編輯框:ID為IDC_SEND_EDIT
  第一個按鈕:Caption為“加入多播組(&J)”,ID為IDC_JOIN_BUTTON
  第二個按鈕:Caption為“多播發送(&S)”,ID為IDC_SEND_BUTTON
  第三個按鈕:Caption為“離開多播組(&L)”,ID為IDC_LEAVE_BUTTON
  第四個按鈕:Caption為“退出(&Q)”,ID為IDC_QUIT_BUTTON


  為兩個編輯框分別新增相關聯的CString型別的變數m_SendMessage和m_ReceiveMessage;為四個按鈕新增相應的訊息處理函式;為對話方塊新增定時器訊息(用於定時顯示接收到的訊息)及其訊息處理函式。


  3.新增一個新的對話方塊資源,設定它的Caption為“加入多播組”,保留預設的兩個按鈕控制元件,同時新增新增以下控制元件:

  靜態文字:Caption為“IP多播組地址:”
  編輯框:ID為IDC_IPADDRESS_EDIT
  靜態文字:Caption為“IP多播埠:”
  編輯框:ID為IDC_PORT_EDIT
  靜態文字:Caption為“生存時間:”
  編輯框:ID為IDC_TTL_EDIT
  複選框:Caption為“多播返回:”,ID為IDC_LOOPBACK_CHECK,Left Text屬性值為True。


  為該對話方塊新增新的類CJoinGroupDlg,它的基類為CDialog,然後為該對話方塊中的三個編輯框分別新增相
關聯的變數,即CSting m_IPAddress、UINT m_nPort、UINT m_nTTL;為複選框新增相關聯的BOOL型別的變數m_Loopback。


  4.在CMulticastSocketDlg.h檔案的前面新增CJoinGroupDlg的標頭檔案:#include “JoinGroupDlg.h”,並在CCMulticastSocketDlg類中添加了一個CJoinGroupDlg類例項物件m_JoinDlg。


  5.為了能在對話方塊中接收網路事件通知,應增加一個使用者自定義的訊息及訊息處理函式,具體實現方法如下:在CMulticastSocketDlg.h檔案的前面自定義訊息:#define WM_SOCK_MSG(WM_USER+166),並在afx_msg塊中說明訊息處理函式:afx_msg LRESULT OnSocketMsg (WPARAM wParam,LPARAM lParam);在CMulticastSocketDlg.cpp檔案中的訊息對映塊中,使用ON_MESSAGE (WM_SOCK_MSG,OnSocketMsg)巨集指令將訊息對映到訊息處理函式中,並具體實現訊息處理函式:LRESULT CCMulticastSocketDlg:: OnSocketMsg(WPARAM wParam,LPARAM lParam){…}。


該程式的主要程式碼可參見程式清單,相關函式的詳細說明可參看Microsoft MSDN幫助系統。為了節省篇幅,程式中省略了部分自動生成的和用於錯誤處理的程式碼。

程式清單:

// CMulticastSocketDlg.cpp : 實現檔案
#include "stdafx.h"
#include "winsock2.h"
#include "CMulticastSocket.h"
#include "CMulticastSocketDlg.h"
……
DWORD cbRet;
SOCKET Sock,SockM; file://UDP套接字,多播套接字
BOOL bFlag,bJoin;
SOCKADDR_IN local,Remote,From; file://分別指向本地、多播組和資料來源的IP地址與埠
int Fromlen;
char ReceiveBuf[32000]; file://接收緩衝區
BOOL bDataReceived;
……
BEGIN_MESSAGE_MAP(CCMulticastSocketDlg, CDialog)
……
ON_BN_CLICKED(IDC_JOIN_BUTTON, OnBnClickedJoinButton)
ON_BN_CLICKED(IDC_LEAVE_BUTTON, OnBnClickedLeaveButton)
ON_BN_CLICKED(IDC_QUIT_BUTTON, OnBnClickedQuitButton)
ON_BN_CLICKED(IDC_SEND_BUTTON, OnBnClickedSendButton)
ON_WM_TIMER()
ON_MESSAGE(WM_SOCK_MSG,OnSocketMsg)
END_MESSAGE_MAP()

BOOL CCMulticastSocketDlg::OnInitDialog()
{
CDialog::OnInitDialog();
……
SetTimer(1,100,NULL); file://設定定時器
Fromlen=sizeof(From);
bDataReceived=TRUE;
bJoin=FALSE;
return TRUE; // 除非設定了控制元件的焦點,否則返回 TRUE
}
……
void CCMulticastSocketDlg::OnBnClickedJoinButton() file://加入多播組
{
if(m_JoinDlg.DoModal()==IDOK)
{
WORD wVersionRequested;
WSADATA wsaData;
int 北京中慶;
wVersionRequested = MAKEWORD(2,2);
北京中慶 = WSAStartup(wVersionRequested, &wsaData); file://初始化WinSock2資源
if(北京中慶!= 0){
AfxMessageBox("不能載入Windows套接字動態連結庫,MB_OK");
return;
}
if (LOBYTE(wsaData.wVersion) !=2 || HIBYTE(wsaData.wVersion) !=2){
AfxMessageBox("WinSock DLL不支援2.0版本,MB_OK");
WSACleanup( );
return;
}
file://建立一個套接字
Sock=WSASocket(AF_INET,SOCK_DGRAM,IPPROTO_UDP,
(LPWSAPROTOCOL_INFO)NULL,0,WSA_FLAG_OVERLAPPED
| WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF);

bFlag=TRUE; file://設定套接字選項,使套接字為可重用埠地址
setsockopt(Sock,SOL_SOCKET,SO_REUSEADDR,(char*)&bFlag,sizeof(bFlag));

file://將套接字繫結到使用者指定埠及預設的介面
memset(&local,0,sizeof(local));
local.sin_family=AF_INET;
local.sin_port=htons((USHORT)m_JoinDlg.m_nPort);
local.sin_addr.s_addr=htonl(INADDR_ANY);
bind(Sock,(struct sockaddr FAR *)&local,sizeof(local));

file://設定多播資料報傳播範圍(生存時間TTL)
WSAIoctl(Sock,SIO_MULTICAST_SCOPE,&m_JoinDlg.m_nTTL,sizeof(int),
NULL,0,&cbRet,NULL,NULL);
file://設定多播返回(LOOKBACK)
BOOL nLoopBack=m_JoinDlg.m_Loopback;
WSAIoctl(Sock,SIO_MULTIPOINT_LOOPBACK,&nLoopBack,sizeof(nLoopBack),
NULL,0,&cbRet,NULL,NULL);

memset(&Remote,0,sizeof(Remote));
Remote.sin_family=AF_INET;
Remote.sin_addr.s_addr=inet_addr(m_JoinDlg.m_IPAddress);
Remote.sin_port=htons(m_JoinDlg.m_nPort);
file://加入到指定的多播組,並指定為既作為傳送者又作為接收者(JL_BOTH)
SockM=WSAJoinLeaf(Sock,(sockaddr*)&Remote,sizeof(Remote),
NULL,NULL,NULL,NULL,JL_BOTH);
WSAAsyncSelect(Sock,m_hWnd,WM_SOCK_MSG,FD_READ); file://註冊網路訊息及其網路事件
bJoin=TRUE;
}
}

void CCMulticastSocketDlg::OnBnClickedSendButton() file://多播發送
{
if(bJoin){
UpdateData(TRUE);
const char* strMessage=LPCTSTR(m_SendMessage);
int nSize=m_SendMessage.GetLength()+1;
sendto(Sock,strMessage,nSize,0,(sockaddr*)&Remote,sizeof(Remote));
}
else
AfxMessageBox("請先加入多播組!");
m_SendMessage="";
UpdateData(FALSE);
}

void CCMulticastSocketDlg::OnBnClickedLeaveButton()
{ file://離開多播組
closesocket(SockM);
closesocket(Sock);
WSACleanup();
m_SendMessage="";
m_ReceiveMessage="";
bDataReceived=TRUE;
bJoin=FALSE;
UpdateData(FALSE);
}

void CCMulticastSocketDlg::OnBnClickedQuitButton()
{ file://退出
DestroyWindow();
}

void CCMulticastSocketDlg::OnTimer(UINT nIDEvent) file://定時器處理函式,實現接收資訊的定時更新
{
if(bDataReceived)
{
m_ReceiveMessage+=ReceiveBuf;
m_ReceiveMessage+="/r/n";
bDataReceived=FALSE;
UpdateData(FALSE);
}
CDialog::OnTimer(nIDEvent);
}

LRESULT CCMulticastSocketDlg::OnSocketMsg(WPARAM wParam,LPARAM lParam)
{
file://檢索網路事件
switch(WSAGETSELECTEVENT(lParam)){
case FD_READ:
recvfrom(Sock,ReceiveBuf,32000,0,(sockaddr *)&From,&Fromlen);
bDataReceived=TRUE; file://設定已接收到一條資訊標誌
break;
}
return TRUE;
}
 

相關推薦

IP技術及其程式設計

IP多播(也稱多址廣播或組播)技術,是一種允許一臺或多臺主機(多播源)傳送單一資料包到多臺主機(一次的,同時的)的TCP/IP網路技術。多播作為一點對多點的通訊,是節省網路頻寬的有效方法之一。在網路音訊/視訊廣播的應用中,當需要將一個節點的訊號傳送到多個節點時,無論是採用重複

大白話解釋IP

是我 拷貝 基於 播放 路由 col 快的 最快 路由選擇 多播引入 比方說我是一個班主任,管著三個班,每個班30個人,每個班有自己的班長。領導讓我宣傳19大視 頻報告,我這裏有源文件。對於普通的單播我需要復制90個副本,給各個班長每人30份,然後班 長在自己班裏每人發一

--概念和程式設計

  11.3  多播 單播用於兩個主機之間的端對端通訊,廣播用於一個主機對整個區域網上所有主機上的資料通訊。單播和廣播是兩個極端,要麼對一個主機進行通訊,要麼對整個區域網上的主機進行通訊。實際情況下,經常需要對一組特定的主機進行通訊,而不是整個區域網上的所有主機,這就是多

IP multicast IP

https://networklessons.com/multicast/multicast-routing/ IP多播有兩種模式,密集模式和稀疏模式: Dense Mode Sparse Mode 密集模式下,每個路由器收到多播包之後,發往除接收介面之外的所有其它介面,類似,洪泛。 稀

IP

紫色代表一級目錄 粉紅代表二級目錄 藍色代表三級目錄 紅色代表關鍵字 橙色代表說明 IP 多播   IP 多播的基本概念     IP 多播 (multicast,以前曾譯為組播) 已成為網際網路的一個熱門課題。     目的:更好第支援一對多通訊。     一對多通訊:一個源點發送到許

雲發現服務 用於在動態環境中部署Connext DDS應用程式的獨立應用程式,包括UDP / IP不可用的情況

在基於雲的環境中配置發現的開箱即用解決方案 介紹 RTI Cloud Discovery Service是在無法使用UDP / IP多播的動態環境中部署RTIConnext®DDS應用程式所需的獨立應用程式。 這是典型的廣域網或某些基於雲的環境,其中路由器和交換機可能會禁

計算機網路(六)---IP

IP多播是需要在因特網上增加更多的智慧才能提供的一種服務。 與單播相比,在一對多的通訊中,多播可大大節約網路資源。當採用多播方式時,視訊伺服器只需要把視訊分組當作多播資料報來發送,並且只需傳送一次。當分組到達目的區域網時,由於區域網具有硬體多播的功能,因此不需要複製分組,在

Linux下的TCP/IP程式設計----和廣播的實現 【轉載】Linux下的TCP/IP程式設計----和廣播的實現

【轉載】 出處:https://blog.csdn.net/wqc_CSDN/article/details/51588769 【轉載】Linux下的TCP/IP程式設計----多播和廣播的實現

Linux下的TCP/IP程式設計和廣播的實現

【轉載】 【轉載】Linux下的TCP/IP程式設計----多播和廣播的實現 2016年06月05日 13:54:10 兜裡有糖心裡不慌 閱

TCP/IP網路程式設計 學習筆記_15 --與廣播

轉自:http://blog.csdn.net/u010223072/article/details/48269213 前言:想想這麼一種情況,網路電臺可能需要同時向成千上萬的使用者傳輸相同的資料,如果用我們以前講過的傳輸形式,每個使用者都傳輸一次,這樣肯定是不合理的

c++ 網絡編程(六)TCP/IP LINUX下 socket編程 與廣播 實現一次發送所有組客戶端都能接收到

send all users 代碼示例 proto 次數 不可 的人 ssa 原文作者:aircraft 原文鏈接:https://www.cnblogs.com/DOMLX/p/9614288.html 一.多播 鍥子:有這麽一種情況,網絡電臺可能需要同時向成

技術-單視窗單程序單IP技術

今天給大家來講解下,什麼是單視窗程序單IP技術? 所謂單視窗程序單IP,就是指電腦上執行的每個遊戲視窗程序都分配一個不同的IP來進行遊戲 這項技術有什麼用呢? 這項技術一般用於很多方面,當然既然在這講,肯定也可以用於外掛方面, 對於遊戲工作室來說,遊戲工作室都是批量掛機來產錢的,

Redis主從復制、實例及其高可用(三)--技術流ken

ups not run mct redis 監控 主從復制 傳輸 recv cep Redis主從復制 Redis的主從復制策略是通過其持久化的rdb文件來實現的,其過程是先dump出rdb文件,將rdb文件全量傳輸給slave,然後再將dump後的操作實時同步到sla

TCP/IP學習筆記(7) --廣播,IGMP協議

單播,多播,廣播的介紹 單播(unicast) 單播是說,對特定的主機進行資料傳送。例如給某一個主機發送IP資料包。這時候,資料鏈路層給出的資料頭裡面是非常具體的目的地址,對於乙太網來 說,就是網絡卡的MAC地址(不是FF-FF-FF-FF-FF-FF這樣的地址)。現在的具有路由功能的主機應

TCP/IP協議--07 廣播,IGMP協議

單播,多播,廣播的介紹 單播(unicast) 單播是說,對特定的主機進行資料傳送。例如給某一個主機發送IP資料包。這時候,資料鏈路層給出的資料頭裡面是非常具體的目的地址,對於乙太網來 說,就是網絡卡的MAC地址(不是FF-FF-FF-FF-FF-FF這樣的地址)。現在的具有路由功能的主機應

TCP/IP學習筆記(7)-廣播,IGMP協議

單播,多播,廣播的介紹 單播(unicast) 單播是說,對特定的主機進行資料傳送。例如給某一個主機發送IP資料包。這時候,資料鏈路層給出的資料頭裡面是非常具體的目的地址,對於乙太網來 說,就是網絡卡的MAC地址(不是FF-FF-FF-FF-FF-FF這樣的地址)

學了Java併發程式設計藝術及執行緒核心程式設計技術,以及最開始學的程式設計思想那本書,今天做些總結

併發Map分析位碼shift預設值是28,對hash值右移28位,取高四位,獲得segments位置,掩碼mask預設值16-1,作一個與值,不知道有何用處,兩個都是不可修改,初始值和併發度有關,一旦確立下來決定了segments陣列大小,包括segments陣列物件不可修改

網路程式設計 筆記(十)與廣播

多播 多播(Multicast)方式的資料傳輸時基於UDP完成的。 TTL(time of live),是決定“資料包傳遞距離”的主要因素。用整數表示,每經過一個路由器就減1,變為0時,資料包無法再傳遞,只能銷燬。 news_sender // /

tcp/ip 執行緒伺服器端的實現(參考tcp/ip網路程式設計

執行緒的切換比程序快的多,因為它不需要切換資料區和堆 共享資料區和堆可以用來交換資訊 一、執行緒的建立 pthread_create()函式 #include<pthread.h> int prthread_create(pthread * thread,c

Linux程式設計(六)---編寫程序程式及其程式碼

實驗目的    通過編寫多程序程式,熟練掌握fork()、exec()、wait()和waitpid()等函式的使用,進一步理解在Linux中多程序程式設計的步驟。 實驗內容    該實驗有3個程序,其中一個為父程序,其餘兩個是該父程序建立的子程序,其中一個子程序執行“ls