UDP套接字程式設計

2021-06-21 23:24:03 字數 1983 閱讀 4895

與面向連線的協議相比,面向無連線協議極為不同。其中乙個重要的不同點就是客戶端與伺服器之間不必建立連線。

對於udp套接字程式設計而言,伺服器建立套接字後,呼叫bind()函式將套接字與準備接收資料的介面繫結在一起。和tcp程式設計不同的是,應用程式不必呼叫listen()和accept()函式等待客戶端的連線。而只需要等待接收資料了。開發udp套接字應用程式,有兩個重要的函式sendto()和recvfrom()。伺服器採用recvfrom()來接收來自客戶端的資料報,並獲得客戶端的端位址,之後向客戶端傳送資料時,採用sendto()函式。

以下是乙個伺服器從客戶端接收訊息,並回送乙個訊息的演算法過程,實現如下:

#include

#include

#define cport 1520

#define versionre makeword(2, 2)

int main()

sin.sin_family = af_inet;

sin.sin_port = htons((unsigned short)cport);

sin.sin_addr.s_un.s_addr = htonl(inaddr_any);

s = socket(af_inet,sock_dgram,0);//make a socket

if (s == invalid_socket)

retval = bind(s, (struct sockaddr*)(&sin), sizeof(sin));//bind socket to address

if (retval == socket_error)

retval = recvfrom(s, buf, 64, 0, (struct sockaddr*)(&clientaddr),&addrlen);

if (retval == socket_error)

buf[retval] = 0;

printf("%s\n",buf);

memset(buf, 64, 0);

strcpy(buf,"hello!\n");

retval = sendto(s, buf, 64, 0, (struct sockaddr*)(&clientaddr),sizeof(clientaddr));

if (retval == socket_error)

closesocket(s);//close socket

wsacleanup();

return 0;}

對於客戶端來說,建立套接字後不必與伺服器建立連線,而是直接向伺服器傳送資料。

#include

#include

#define cport 1520

#define versionre makeword(2, 2)

int main()

sin.sin_family = af_inet;

sin.sin_port = htons((unsigned short)cport);

sin.sin_addr.s_un.s_addr = inet_addr("127.0.0.1");

s = socket(af_inet,sock_dgram,0);//make a socket

if (s == invalid_socket)

sendval = sendto(s, buf, strlen(buf), 0, (struct sockaddr *)(&sin), sizeof(sin));

if (sendval == socket_error)

sendval = recvfrom(s, buf, 64, 0, (struct sockaddr*)(&sin),&addrlen);

if (sendval == socket_error)

printf("%s\n",buf);

closesocket(s);//close socket

wsacleanup();

return 0;

}

UDP套接字程式設計

udp是使用者資料報協議,與tcp協議一樣,在網路中處理資料報,是一種無連線的傳輸層協議,具有不可靠性,udp有不提供資料報分組 組裝和不能對資料報進行排序的缺點,也就是說,當報文傳送之後,是無法得知其是否安全完整到達的。基於udp的客戶端伺服器 伺服器 include include includ...

基本UDP套接字程式設計

udp函式呼叫為 客戶不與伺服器建立連線,而是只管使用sendto函式給伺服器傳送資料報,其中必須指定目的地的位址為引數。類似地,伺服器不接受來客戶的連線,而是只管呼叫recvfrom函式,等待來自某個客戶的資料到達,recvfrom將與所接收的資料一道返回客戶的協議位址,因此可以把響應傳送給正確的...

UDP網路程式設計套接字

ip協議有兩個版本,乙個是ipv4,乙個是ipv6。ip位址是在ip協議中,用來標識網路中不同的主機的位址。對於ipv4來說,ip位址是乙個4位元組,32位的整數。在資料報頭部的兩個ip位址,乙個叫源ip位址,乙個叫目的ip位址 埠號port 必須是眾所周知的,並且不能隨意修改 埠號是乙個2個位元組...