linux網路程式設計 udp

2021-10-20 20:04:27 字數 3879 閱讀 6223

udp

udp收發

udp 協議不需要建立連線,類似於傳送簡訊,因此 udp 的程式設計方式比 tcp 更加簡單。udp 有其自己特有的接受與傳送資料的函式

socket(af_inet, sock_dgram, 0);//建立socket

bind(socket_fd, (struct sockaddr*) (&server_addr),

sizeof(struct sockaddr_in));//繫結

recvfrom(socket_fd, receive_buf, sizeof(receive_buf), 0,

(struct sockaddr*) (&client_addr), &client_addr_len); //接收

sendto(socket_fd, receive_buf, strlen(receive_buf), 0,

(struct sockaddr*) (&client_addr), client_addr_len); //傳送

標頭檔案:

#include

#include

定義函式:int sendto(int s, const void * msg, int len, unsigned int flags, const struct sockaddr * to, int tolen);

函式說明:sendto() 用來將資料由指定的socket 傳給對方主機. 引數s 為已建好連線的socket, 如果利用udp協議則不需經過連線操作. 引數msg 指向欲連線的資料內容, 引數flags 一般設0, 詳細描述請參考send(). 引數to 用來指定欲傳送的網路位址, 結構sockaddr 請參考bind(). 引數tolen 為sockaddr 的結果長度.

返回值:成功則返回實際傳送出去的字元數, 失敗返回-1, 錯誤原因存於errno 中.

錯誤**:

1、ebadf 引數s 非法的socket 處理**.

2、efault 引數中有一指標指向無法訪問的記憶體空間.

3、wnotsock canshu s 為一檔案描述詞, 非socket.

4、eintr 被訊號所中斷.

5、eagain 此動作會令程序阻斷, 但引數s 的soket 為補課阻斷的.

6、enobufs 系統的緩衝記憶體不足.

7、einval 傳給系統呼叫的引數不正確.

標頭檔案:#include #include

定義函式:int recvfrom(int s, void *buf, int len, unsigned int flags, struct sockaddr *from,int *fromlen);

函式說明:recv()用來接收遠端主機經指定的socket 傳來的資料, 並把資料存到由引數buf 指向的記憶體空間, 引數len 為可接收資料的最大長度. 引數flags 一般設0, 其他數值定義請參考recv(). 引數from 用來指定欲傳送的網路位址, 結構sockaddr 請參考bind(). 引數fromlen 為sockaddr 的結構長度.

返回值:成功則返回接收到的字元數, 失敗則返回-1, 錯誤原因存於errno 中.

#include

int inet_pton(int family, const char *strptr, void *addrptr); //將點分十進位制的ip位址轉化為用於網路傳輸的數值格式

返回值:若成功則為1,若輸入不是有效的表示式則為0,若出錯則為-1

const char * inet_ntop(int family, const void *addrptr, char *strptr, size_t len); //將數值格式轉化為點分十進位制的ip位址格式

返回值:若成功則為指向結構的指標,若出錯則為null

udp.c

#include

#include

#include

#include

#include

//close()

#include

//strcmp()等字串操作函式

#include

static

int socket_fd =0;

#if 0

1、建立socket

2、配置為udp

3、配置本地ip和埠號以及協議型別

4、傳送

5、接收

6、關閉

Linux 網路程式設計(二)UDP程式設計

資料報通訊 對於資料報通訊的伺服器端來說,它不必再在乙個埠上偵聽,以等待建立連線,而只需生成乙個埠描述符,並且把這個埠描述符繫結到本地位址上就可以了。udp網路程式設計具體的操作流程為 使用系統呼叫socket 來獲得檔案描述符,該呼叫的宣告格式為 connect 系統呼叫由客戶端呼叫,它的用法如下...

Linux網路程式設計 UDP程式設計例項

使用udp協議通訊時伺服器端和客戶端無需建立連線,只要知道對方套接字的位址資訊,就可以傳送資料。伺服器端只需建立乙個套接字用於接收不同客戶端發來的請求,經過處理後再把結果傳送給對應的客戶端。伺服器端和客戶端使用udp的流程如下圖示 伺服器端 server.c include include incl...

Linux 網路程式設計之UDP

1.介紹 udp協議是無連線的,不可靠傳輸的協議.伺服器與客戶端的互動不需要建立連線,沒有流量控制的功能。與tcp一樣,它也是傳輸層協議,通訊過程中需要ip位址與埠號。使用udp進行程式設計包括伺服器與客戶端,下面介紹一下伺服器與客戶端的通訊流程 伺服器流程 1 建立伺服器套接字描socket 2 ...