亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

套接字是什么?套接字分類、連接方式及運行示例

2024-04-25 20:46:24
字體:
來源:轉載
供稿:網友

什么是套接字?

源IP地址和目的IP地址以及源端口號和目的端口號的組合稱為套接字。其用于標識客戶端請求的服務器和服務。套接字,是支持TCP/IP的網絡通信的基本操作單元,可以看做是不同主機之間的進程進行雙向通信的端點,簡單的說就是通信的兩方的一種約定,用套接字中的相關函數來完成通信過程。

非常非常簡單的舉例說明下:Socket=Ip address+ TCP/UDP + port。

套接字分類:

常用的TCP/IP協議的3種套接字類型如下所示。

流套接字(SOCK_STREAM):

流套接字用于提供面向連接、可靠的數據傳輸服務。該服務將保證數據能夠實現無差錯、無重復發送,并按順序接收。流套接字之所以能夠實現可靠的數據服務,原因在于其使用了傳輸控制協議,即TCP(The Transmission Control Protocol)協議。

數據報套接字(SOCK_DGRAM):

數據報套接字提供了一種無連接的服務。該服務并不能保證數據傳輸的可靠性,數據有可能在傳輸過程中丟失或出現數據重復,且無法保證順序地接收到數據。數據報套接字使用UDP(User Datagram Protocol)協議進行數據的傳輸。由于數據報套接字不能保證數據傳輸的可靠性,對于有可能出現的數據丟失情況,需要在程序中做相應的處理。

原始套接字(SOCK_RAW):

原始套接字(SOCKET_RAW)允許對較低層次的協議直接訪問,比如IP、 ICMP協議,它常用于檢驗新的協議實現,或者訪問現有服務中配置的新設備,因為RAW SOCKET可以自如地控制Windows下的多種協議,能夠對網絡底層的傳輸機制進行控制,所以可以應用原始套接字來操縱網絡層和傳輸層應用。比如,我們可以通過RAW SOCKET來接收發向本機的ICMP、IGMP協議包,或者接收TCP/IP棧不能夠處理的IP包,也可以用來發送一些自定包頭或自定協議的IP包。網絡監聽技術很大程度上依賴于SOCKET_RAW

原始套接字與標準套接字(標準套接字指的是前面介紹的流套接字和數據報套接字)的區別在于:原始套接字可以讀寫內核沒有處理的IP數據包,而流套接字只能讀取TCP協議的數據,數據報套接字只能讀取UDP協議的數據。因此,如果要訪問其他協議發送數據必須使用原始套接字。

Host A上的程序A將一段信息寫入Socket中,Socket的內容被Host A的網絡管理軟件訪問,并將這段信息通過Host A的網絡接口卡發送到Host B,Host B的網絡接口卡接收到這段信息后,傳送給Host B的網絡管理軟件,網絡管理軟件將這段信息保存在Host B的Socket中,然后程序B才能在Socket中閱讀這段信息。

假設在網絡中添加第三個主機Host C,那么Host A怎么知道信息被正確傳送到Host B而不是被傳送到Host C中了呢?基于TCP/IP網絡中的每一個主機均被賦予了一個唯一的IP地址,IP地址是一個32位的無符號整數,由于沒有轉變成二進制,因此通常以小數點分隔,如:198.163.227.6,正如所見IP地址均由四個部分組成,每個部分的范圍都是0-255,以表示8位地址。

值得注意的是IP地址都是32位地址,這是IP協議版本4(簡稱Ipv4)規定的,目前由于IPv4地址已近耗盡,所以IPv6地址正逐漸代替Ipv4地址,Ipv6地址則是128位無符號整數。

假設第二個程序被加入的網絡的Host B中,那么由Host A傳來的信息如何能被正確的傳給程序B而不是傳給新加入的程序呢?這是因為每一個基于TCP/IP網絡通訊的程序都被賦予了唯一的端口和端口號,端口是一個信息緩沖區,用于保留Socket中的輸入/輸出信息,端口號是一個16位無符號整數,范圍是0-65535,以區別主機上的每一個程序(端口號就像房屋中的房間號),低于256的端口號保留給標準應用程序,比如pop3的端口號就是110,每一個套接字都組合進了IP地址、端口、端口號,這樣形成的整體就可以區別每一個套接字。

連接方式

應用層通過傳輸層進行數據通信時,TCP和UDP會遇到同時為多個應用程序進程提供并發服務的問題。

主要參數

區分不同應用程序進程間的網絡通信和連接,主要有3個參數:通信的目的IP地址、使用的傳輸層協議(TCP或UDP)和使用的端口號。Socket原意是 “插座”。通過將這3個參數結合起來,與一個“插座”Socket綁定,應用層就可以和傳輸層通過套接字接口,區分來自不同應用程序進程或網絡連接的通信,實現數據傳輸的并發服務。

Socket可以看成在兩個程序進行通訊連接中的一個端點,是連接應用程序和網絡驅動程序的橋梁,Socket在應用程序中創建,通過綁定與網絡驅動建立關系。此后,應用程序送給Socket的數據,由Socket交給網絡驅動程序向網絡上發送出去。計算機從網絡上收到與該Socket綁定IP地址和端口號相關的數據后,由網絡驅動程序交給Socket,應用程序便可從該Socket中提取接收到的數據,網絡應用程序就是這樣通過Socket進行數據的發送與接收的。

Sockets

流式套接字

本文描述流式套接字,它是兩種可用的 Windows Sockets 類型中的一種。(另一種類型是數據文報套接字 。)

流式套接字提供沒有記錄邊界的數據流:可以是雙向的字節流(應用程序是全雙工:可以通過套接字同時傳輸和接收)??梢蕾嚵鱾鬟f有序的、不重復的數據。(“有序”指數據包按發送順序送達。“不重復”指一個特定的數據包只能獲取一次。)這能確保收到流消息,而流非常適合處理大量數據。

網絡傳輸層可將數據拆分為分組或若干個大小適當的數據包。 CSocket 類將為您處理打包和解包。

流基于顯式連接:套接字 A 請求與套接字 B 建立連接;套接字 B 接受或拒絕此連接請求。

打電話的情況與流非常相似:正常情況下,接聽方聽到您的話和您講話時的順序一樣,沒有重復和遺漏。流套接字適合文件傳輸協議 (FTP) 這類實現,此協議有利于傳輸任意大小的 ASCII 或二進制文件。

如果必須保證數據送達而且數據大小很大時,流式套接字優于數據文報套接字。有關流式套接字的更多信息,請參見 Windows Sockets 規范。該規范可在 Platform SDK 中獲得。

MFC 示例 CHATTER 和 CHATSRVR 都使用流式套接字。這些示例可能已經設計為使用數據文報套接字向網絡上的所有接收套接字廣播。而目前的設計更好,這是因為:

廣播模型受制于網絡“洪水”(或“風暴”)問題。

后來采用的客戶端-服務器模型更有效。

流式模型提供可靠的數據傳輸,數據文報模型則未提供。

最終模型利用在 CArchive 類借給 CSocket 類的 Unicode 和 ANSI 套接字應用程序之間通信的能力。

注意

如果使用 CSocket 類,則必須使用流。如果將套接字類型指定為 SOCK_DGRAM ,則 MFC 斷言失敗

Windows Sockets 示例列表

下列 MFC 示例程序闡釋了 Windows Sockets 功能:

CHATTER

CHATTER 是一個 Windows 套接字客戶端示例應用程序。它是一個具有拆分窗口的單文檔界面 (SDI) 應用程序,允許用戶將消息發送到討論服務器 (CHATSRVR),討論服務器然后將消息同時發送給其他多個 CHATTER 用戶。

通過使 CHATTER 應用程序向服務器發送廣播數據文報包而不是消息流,可以在不使用客戶端/服務器模型的情況下編寫 CHATTER 和 CHATSRVR。然而,與流式套接字不同,數據文報套接字不能保證一定會被傳送;因此,一些消息可能不會到達討論中的所有其他用戶。

運行示例

生成并運行 CHATTER 示例

打開解決方案 chatter.sln。

在“生成”菜單上單擊“生成”。

在“調試”菜單上單擊“開始執行(不調試)”。

運行 CHATTER 時,有一個“Setup”對話框請求輸入以下內容:

Handle

用來尋址所有消息的名稱。例如,可以選擇“”。發送的所有消息的前面都會自動加上名稱“”。

Server

運行 CHATSVR 示例的計算機的 IP 地址。

Channel

標識要加入的討論的數字(一臺計算機可以運行多個討論服務器)。

提供了所有這些信息并單擊“OK”后,主應用程序窗口隨即出現。若要發送消息,請在下部窗格中鍵入消息。按 ENTER 鍵發送消息。若要發送多行消息,請按 CTRL+ENTER 鍵。關鍵字

示例

此示例說明了以下關鍵字:

AfxGetApp、AfxMessageBox、CArchive::Flush、CArchive::IsStoring、CControlBar::EnableDocking、CControlBar::GetBarStyle、CControlBar::SetBarStyle、CDialog::DoModal、CDocument::DeleteContents、CDocument::GetFirstViewPosition、CDocument::GetNextView、CDocument::OnNewDocument、CEditView::GetEditCtrl、CEditView::SerializeRaw、CFrameWnd::DockControlBar、CFrameWnd::EnableDocking、CFrameWnd::OnCreateClient、CFrameWnd::SetActiveView、CObject::AssertValid、CObject::Dump、CObject::IsKindOf、CObject::Serialize、CRect::Size、CSplitterWnd::CreateView、CSplitterWnd::GetPane、CStatusBar::Create、CStatusBar::SetIndicators、CString::GetBuffer、CString::GetLength、CString::IsEmpty、CString::LoadString、CString::ReleaseBuffer、CToolBar::Create、CToolBar::LoadBitmap、CToolBar::SetButtons、CView::GetDocument、CView::OnDraw、CWinApp::AddDocTemplate、CWinApp::InitInstance、CWinApp::LoadStdProfileSettings、CWinApp::OnFileNew、CWnd::DestroyWindow、CWnd::DoDataExchange、CWnd::GetClientRect、CWnd::GetWindowText、CWnd::GetWindowTextLength、CWnd::KillTimer、CWnd::OnChar、CWnd::OnCreate、CWnd::OnTimer、CWnd::PreCreateWindow、CWnd::SetTimer、CWnd::SetWindowText、SetWindowText、rand、wsprintf

注意一些示例(如此示例)尚未經過修改以反映 Visual C++ 向導、庫和編譯器的變化,但仍說明了如何完成所需的任務。

請參見

MFC 示例

CHATSRVR

CHATSRVR 是 Windows 套接字服務器示例應用程序,它是一個單文檔界面 (SDI) 應用程序,用于為 CHATTER 示例的客戶端實現討論服務器。

通過使 CHATTER 應用程序向服務器發送廣播數據文報包而不是消息流,可以在不使用客戶端/服務器模型的情況下編寫 CHATTER和 CHATSRVR。然而,與流式套接字不同,數據文報套接字不能保證一定會被傳送;因此,一些消息可能不會到達討論中的所有其他用戶。生成并運行示例

生成并運行 CHATSRVR 示例

打開解決方案 chatsrvr.sln。

在“生成”菜單上單擊“生成”。

在“調試”菜單上單擊“開始執行(不調試)”。

運行 CHATSRVR 時會顯示一個請求輸入“Channel”的“Discussion”對話框。“Channel”是標識要支持的討論的數字(一臺計算機可以運行多個討論服務器)。提供了此信息并單擊“OK”后,主應用程序窗口隨即出現。

通信

要通過Internet進行通信,至少需要一對套接字,其中一個運行在客戶端,稱之為ClientSocket,另一個運行于服務器端面,稱為ServerSocket。根據連接啟動的方式以及本地要連接的目標,套接字之間的連接過程可以分為三個步驟:服務器監聽、客戶端請求、連接確認。

服務器監聽是指服務端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態,實時監控網絡狀態。

客戶端請求是由客戶端的套接字提出連接請求,要連接的目標是服務器端套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器套接字的地址和端口號,然后再向服務器端套接字提出連接請求。

連接確認是當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求時,它就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的信息發送給客戶端,一旦客戶端確認了此連接,連接即可建立。而服務器端繼續處于監聽狀態,繼續接收其他客戶端的連接請求。

使用套接字進行數據處理有兩種基本模式:同步和異步。

同步模式:

同步模式的特點是在通過Socket進行連接、接收、發送數據時,客戶機和服務器在接收到對方響應前會處于阻塞狀態,即一直等到收到對方請求進才繼續執行下面的語句??梢姡侥J街贿m用于數據處理不太多的場合。當程序執行的任務很多時,長時間的等待可能會讓用戶無法忍受。

異步模式:

異步模式的特點是在通過Socket進行連接、接收、發送操作時,客戶機或服務器不會處于阻塞方式,而是利用callback機制進行連接、接收、發送處理,這樣就可以在調用發送或接收的方法后直接返回,并繼續執行下面的程序。可見,異步套接字特別適用于進行大量數據處理的場合。

使用同步套接字進行編程比較簡單,而異步套接字編程則比較復雜。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区在线看| 亚洲第一区第一页| 成人女保姆的销魂服务| 久久精彩免费视频| 国产成人高潮免费观看精品| 亚洲黄色av网站| 亚洲精品99久久久久中文字幕| 欧美激情视频网址| 有码中文亚洲精品| 欧美孕妇与黑人孕交| 欧美一区三区三区高中清蜜桃| 欧美一级电影免费在线观看| 久久久久久久久久av| 欧美国产亚洲精品久久久8v| 亚洲欧美在线磁力| 在线观看久久久久久| 日韩www在线| 久久综合电影一区| 欧美日韩国产成人高清视频| 亚洲精品91美女久久久久久久| 日韩中文字幕不卡视频| 国产一区二区欧美日韩| 亚洲精品成人免费| 色综合五月天导航| 国产精品一区二区性色av| 日韩激情av在线播放| 欧美精品激情在线观看| 日韩在线国产精品| 日韩在线中文字| 亚洲伊人一本大道中文字幕| 亚洲黄色www| 人九九综合九九宗合| 亚洲二区中文字幕| 国产不卡精品视男人的天堂| 日韩色av导航| 日韩www在线| 欧美视频专区一二在线观看| 亚洲国产欧美一区| 欧美亚洲日本网站| 久久久久久久久久av| 亚洲国产精品成人精品| 全亚洲最色的网站在线观看| 91九色国产在线| 久久精品99久久久久久久久| 欧美肥婆姓交大片| 在线精品91av| 亚洲欧美制服综合另类| 2019中文在线观看| 久久99久久99精品中文字幕| 91成人在线观看国产| 亚洲第一中文字幕在线观看| www.日本久久久久com.| 亚洲人永久免费| 久久国产天堂福利天堂| 成人免费视频xnxx.com| 日韩成人小视频| 色悠久久久久综合先锋影音下载| www.欧美精品| 久久精品99国产精品酒店日本| 国产精品手机播放| 亚洲黄色片网站| 色综合五月天导航| 欧美激情性做爰免费视频| 国产成人综合亚洲| 91美女高潮出水| 中文字幕亚洲综合久久筱田步美| 狠狠色香婷婷久久亚洲精品| 久久人人看视频| 日韩中文字幕网站| 国产精品日日摸夜夜添夜夜av| 国产精品白嫩初高中害羞小美女| 亚洲毛片在线观看.| 国产精品视频一区二区三区四| 国内揄拍国内精品少妇国语| 亚洲小视频在线观看| 国产精品久久中文| 久久精品99国产精品酒店日本| 国产视频在线一区二区| 中文字幕欧美日韩精品| 97涩涩爰在线观看亚洲| 亚洲深夜福利视频| 国产精品视频最多的网站| 欧美孕妇与黑人孕交| 国产精品吴梦梦| 久久久午夜视频| 欧美午夜丰满在线18影院| 亚洲精品久久久久久久久久久久| 国产精品成人一区| 国产日韩在线看| 粉嫩av一区二区三区免费野| 亚洲国产精品va在线观看黑人| 日韩欧美高清视频| 国产精品美女免费视频| 国产视频福利一区| 欧美成人免费网| 国产精品视频一区二区高潮| 黄色精品一区二区| 亚洲电影av在线| 亚洲精品一区久久久久久| 色黄久久久久久| 久久精品成人一区二区三区| 国产欧美日韩精品专区| 欧洲s码亚洲m码精品一区| 久久夜精品香蕉| 国产精品jvid在线观看蜜臀| 日韩在线观看免费高清完整版| 91成人福利在线| 在线国产精品视频| 久久电影一区二区| 亚洲第一免费播放区| 亚洲欧美另类人妖| 国产亚洲a∨片在线观看| 日韩在线视频中文字幕| 91av在线免费观看| 国产这里只有精品| 国产精品视频一区二区高潮| 777777777亚洲妇女| 91视频88av| 97视频免费观看| 日韩一中文字幕| 欧美亚洲另类视频| 91麻豆国产语对白在线观看| 亚洲人成电影网站色www| 亚州欧美日韩中文视频| 国产视频久久网| 久久久999精品| 成人黄色在线免费| 国产精品美女999| 在线精品视频视频中文字幕| 国产精品免费久久久久久| 亚洲一级黄色片| 日韩**中文字幕毛片| 亚洲视频在线播放| 91av在线看| 日韩欧美在线观看| 国产视频欧美视频| 国产亚洲人成网站在线观看| 国产综合香蕉五月婷在线| 国产精品黄视频| 亚洲成avwww人| 成人性生交xxxxx网站| 欧美成人午夜影院| 精品性高朝久久久久久久| 亚洲国产精品一区二区三区| 欧美日韩午夜视频在线观看| 国产精品无码专区在线观看| www.欧美视频| 亚州国产精品久久久| 91久热免费在线视频| 亚洲新中文字幕| 国产ts一区二区| 亚洲精品日韩激情在线电影| 国产亚洲精品久久久久动| 2021久久精品国产99国产精品| 精品久久久久久中文字幕大豆网| 欧美大片第1页| 久久偷看各类女兵18女厕嘘嘘| 国产精品第2页| 国外日韩电影在线观看| 欧美在线视频导航| 欧美国产精品va在线观看| 欧美亚州一区二区三区| 国产成人精品999| 亚洲伊人一本大道中文字幕|