利用Winsock實現UDP通訊

2021-10-07 06:26:31 字數 2598 閱讀 6713

internet 協議集支援乙個無連線的傳輸協議,該協議稱為使用者資料報協議(udp,user datagram protocol)。udp 為應用程式提供了一種無需建立連線就可以傳送封裝的 ip 資料報的方法。

首先認識幾個windows提供的結構體:

word:為微軟sdk中的型別,為兩個byte的無符號整數,可用makeword函式生成,語句為word wrd = makeword(blow,bhigh);

socket: 用於建立socket,可作為資料的接收端或發出端

sockaddr_in:該結構體指定了位址族(sin_family), 16位tcp/udp埠號(sin_port),32位ip位址(sin_addr),與保留的字元陣列char sin_zeros[8]

1.呼叫wsastartup函式,啟動windows sockets asynchronous,即windos非同步巢狀字,完成winsock服務初始化。

2.呼叫socket函式建立服務端socket,引數指明為udp通訊。

sserver = socket(af_inet, sock_dgram, ipproto_udp);

3.將該socket與sockaddr_in型別的資料變數通過bind函式繫結,該變數指定了socket的位址族、埠號與ip位址。

int

socket_init()

sserver =

socket

(af_inet, sock_dgram, ipproto_udp)

;//採用udp

if(sserver == invalid_socket)

addrserv.sin_family = af_inet;

addrserv.sin_port =

htons

(9990);

//相同的埠響應相同埠的請求

addrserv.sin_addr.s_un.s_addr =

htons

(inaddr_any)

; retval =

bind

(sserver,

(const sockaddr*

)&addrserv,

sizeof

(sockaddr_in));

if(retval == socket_error)

return0;

}

1.同樣呼叫wsastartup函式,完成winsock服務初始化。

2.呼叫socket函式建立服務端socket,引數指明為udp通訊。

shost = socket(af_inet, sock_dgram, ipproto_udp);

3.指明與該socket(shost)進行資料交換socket的位址,即需要定義乙個sockaddr_in型別的變數,指定服務端的位址族、埠號與ip位址

int

socket_init()

shost =

socket

(af_inet, sock_dgram, ipproto_udp)

;//udp

if(shost == invalid_socket)

addrserv.sin_family = af_inet;

addrserv.sin_port =

htons

(9990);

addrserv.sin_addr.s_un.s_addr =

inet_addr

("127.0.0.1");

int sserveraddrlen =

sizeof

(addrserv)

;return0;

}

在winsock實現的udp通訊中,我們通過sendto與recvfrom函式實現資訊的傳送與接收。

int sendto ( socket s ,

const

void

* msg,

int len,

unsigned

int flags,

const

struct sockaddr * to ,

int tolen )

;

在該函式中,s為資訊傳送端,msg為資訊首位址,len為長度,flags一般設為0,to指定接收資訊的socket位址資訊,tolen為位址資訊的長度。

int

recvfrom

(socket s,

void

*buf,

int len,

unsigned

int flags,

struct sockaddr *from,

int*fromlen)

;

recvfrom函式的引數與sendto基本相同,同樣需要指明傳送資訊的socket,接受資訊的socket位址資訊。

1.udp通訊是無連線的傳輸層協議,這通過其呼叫sendto與recvfrom函式時需要指定接收方就可以看出。

2.udp盡最大努力傳輸資料,但不能保證可靠交付。

3.udp傳輸相對較快,且支援一對

一、一對多、多對多的互動通訊.

利用WinSock實現簡單網路程式設計

利用winsock可以實現tcp udp協議通訊。我們知道,網路通訊要找三個位址即網路位址 主機位址 服務位址 埠號 通過機器的ip位址和子網掩碼計算可以得到網路和主機位址。而每個機器的服務位址 埠號 有65536個。下面就談一下怎樣利用winsock實現網路通訊。伺服器端程式編寫 建立乙個窗體,新...

利用UDP協議實現廣播通訊

在開發應用程式時,如果需要向網路中的所有使用者傳送資訊,可以採用udp協議進行廣播通訊,而不用一一向每個使用者傳送訊息。在程式中使用廣播通訊非常簡單,在建立套接字後,呼叫 setsockopt 方法使套接字具有so broadcast選項。然後再傳送訊息時,降低至設定為廣播形式。建立套接字 m ps...

Android利用Binder實現程序通訊

注意 reply.writenoexception 這個方法,服務端如果寫了這個方法,客戶端獲取服務端訊息也必須要寫reply.readexception 這個方法。必須成對出現,否則獲取不到服務端的訊息。public ibinder onbind intent intent class mybin...