與面向連線的協議相比,面向無連線協議極為不同。其中乙個重要的不同點就是客戶端與伺服器之間不必建立連線。
對於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個位元組...