基於TCP與UDP的windows網路程式設計

2021-07-02 01:22:48 字數 1646 閱讀 6125

下面是 winsockapi 提供的幾個轉換函式:

u_long htonl(u_long hostlong);//將32位的主機位元組序轉換為32位的網路位元組序,htonl => host to net long

u_short htons(u_short hostshort);//將16位的主機位元組序轉換為16位的網路位元組序,htons => host to net short

u_long ntohl(u_long netlong);//將32位的網路位元組序轉換為32位的主機位元組序,ntohl => net to host long

u_short ntohs(u_short netshort);//將16位的網路位元組序轉換為16位的主機位元組序,ntohs => net to host short

基於 tcp(面向連線)的 socket 程式設計的伺服器端程式流程如下:

建立乙個套接字(socket)。

將套接字繫結到乙個本地位址和埠上(bind)。

將套接字設定為監聽模式,準備接收客戶的請求(listen)。

等待客戶請求的到來;當請求到來後,接受連線請求,返回乙個新的對應與此連線的套接字(accept)。

用返回的套接字和客戶端進行通訊(send/recv)。

返回,等待另一客戶請求。

關閉套接字。

基於tpc(面向連線)的 socket 程式設計的客戶端程式流程如下:

建立套接字(socket)。

向伺服器發出連線請求(connect)。

和伺服器端進行通訊(send/recv)。

關閉套接字。

在伺服器端,當呼叫 accept 函式時,程式就會等待,等待客戶呼叫 connect 函式發出連線請求,然後伺服器端接受該請求,於是雙方就建立了連線。之後,伺服器端和客戶端就可以利用 send 和 recv 函式進行通訊了。注意,在客戶端不需要呼叫 bind 函式。因為伺服器需要接收客戶端的請求,所以必須告訴本地主機它打算在哪個 ip 位址和哪個埠上等待客戶請求,因此必須呼叫 bind 函式來實現這一功能。而對客戶端來說,當它發起連線請求,伺服器接受該請求後,在伺服器端就已經儲存了該客戶端的 ip 位址和埠號的資訊。這樣,對伺服器端來說,一旦建立連線後,實際上已經儲存了客戶端的 ip 位址和埠號資訊,因此就可以利用返回的套接字呼叫 send/recv 函式與客戶端進行通訊。

伺服器端也叫做接收端,對於 udp 的套接字來說,它的伺服器端和客戶端這種概念不是很強化,我們也可以把伺服器端,即先啟動的一端稱為接收端,傳送資料的一端稱為客戶端。

接收端程式的編寫:

建立套接字(socket)。

將套接字繫結到乙個本地位址和埠上(bind)。

等待接收資料(recvfrom)。

關閉套接字。

對於基於 udp 的套接字程式設計,為什麼仍要需要呼叫 bind 函式進行繫結呢?應注意,雖然面向無連線的 socket 程式設計無須建立連線,但是為了完成這次通訊,對於接收端來說,它必須先啟動以接收客戶端傳送的資料,因此接收端必須告訴主機它在哪個位址和埠等待資料的到來,也就是說,接收端必須呼叫 bind 函式將套接字繫結到乙個本地位址和埠上。

客戶端程式的編寫:

建立套接字(socket)。

向伺服器傳送資料(sendto)。

關閉套接字。

基於tcp和udp的socket通訊

做個小遊戲的project用到了socket程式設計,於是,就在網上查閱了一下資料,下面簡單總結一下。1.什麼是socket socket是在應用層與傳輸層之間的乙個抽象層,它把tcp ip層複雜的操作抽象為幾個介面 用層的程序實現網路通訊,使得不同主機的相關程序之間交換資料。2.什麼是tcp和ud...

基於Socket的UDP和TCP協議

一 概述 tcp 傳輸控制協議 和udp 使用者資料報協議 是網路體系結構tcp ip模型中傳輸層一層中的兩個不同的通訊協議。tcp 傳輸控制協議,一種面向連線的協議,給使用者程序提供可靠的全雙工的位元組流,tcp套介面是位元組流套介面 stream socket 的一種。udp 使用者資料報協議。...

TCP 與UDP的異同

tcp 傳輸控制協議 和udp 擁護資料報協議 是傳輸層的倆個傳輸協議,它們倆個的最大區別就是是否面向連線。tcp包括了面向連線和可靠資料傳輸服務,在客戶端和伺服器端進行通訊前,要先交換傳輸層控制資訊,為雙方的通訊做好準備。在這個握手階段後,我們就可以認為在這倆個程序間存在乙個tcp連線,且是乙個全...