• 正文
    • tcp協(xié)議程序
    • udp協(xié)議程序
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-網(wǎng)絡(luò)編程示例之網(wǎng)絡(luò)socket程序編程

2024/11/12
1162
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

注意:學(xué)習(xí)資料可在ElfBoard官方網(wǎng)站“資料”專區(qū)獲取。

本節(jié)用到的源碼路徑:ELF 1開發(fā)板資料包->03-例程源碼->03-1 命令行例程源碼->05_elf1_cmd_net

tcp協(xié)議程序

tcp_server.c

服務(wù)端仍然是按照如下順序進(jìn)行編寫:

socket()//創(chuàng)建套接字;

bind()//分配套接字地址;

listen()//等待連接請求狀態(tài);

accept()//允許連接;

read()/write()//進(jìn)行數(shù)據(jù)交換;

close()//斷開連接;

需要注意我們在檢測建立鏈接的客戶端IP是否與設(shè)置的相同時沒有做判別,將接收所有IP請求建立鏈接。下面我們看下詳細(xì)解釋:

func_detect_tcp_server_link(int fd): 檢測 TCP 服務(wù)端連接狀態(tài)的函數(shù)。它接受一個文件描述符 fd,通過調(diào)用 getsockopt 函數(shù)獲取與該文件描述符相關(guān)的 TCP 連接信息,并判斷連接狀態(tài)是否為已建立(TCP_ESTABLISHED)。如果連接狀態(tài)為已建立,則返回 0;否則返回-1。

func_create_tcp_server_listen(int *fd, unsigned int listen_port): 建立 TCP 服務(wù)端監(jiān)聽的函數(shù)。它接受一個指向監(jiān)聽文件描述符的指針 fd,以及監(jiān)聽的端口號 listen_port。函數(shù)首先創(chuàng)建一個套接字,并將其設(shè)置為非阻塞模式。然后,通過調(diào)用 bind 函數(shù)將套接字綁定到指定的端口上,并通過調(diào)用 listen 函數(shù)開始監(jiān)聽客戶端請求。如果操作成功,返回 0;否則返回-1。

func_tcp_server_accept(int listen_fd, int *fd, char *ip): TCP 服務(wù)端與客戶端建立連接的函數(shù)。它接受一個監(jiān)聽文件描述符 listen_fd,一個指向連接文件描述符的指針 fd,以及一個用于 IP 過濾的客戶端 IP 地址 ip。函數(shù)通過調(diào)用 accept 函數(shù)接受客戶端的連接請求,并檢查建立連接的客戶端 IP 是否與設(shè)置的 IP 相同。如果 IP 相同,將連接文件描述符賦值給 fd,并返回1;否則返回0。

func_tcp_server_receive(int fd, char *p_receive_buff, int count): TCP 服務(wù)端接收數(shù)據(jù)的函數(shù)。它接收一個連接文件描述符 fd,一個指向接收數(shù)據(jù)緩沖區(qū)的指針 p_receive_buff,以及最大接收長度 count。函數(shù)通過調(diào)用 recv 函數(shù)接收數(shù)據(jù),并返回實際接收到的數(shù)據(jù)長度。

func_tcp_server_send(int fd, char *p_send_buff, int count): TCP 服務(wù)端發(fā)送數(shù)據(jù)的函數(shù)。它接收一個連接文件描述符 fd,一個指向發(fā)送數(shù)據(jù)緩沖區(qū)的指針 p_send_buff,以及發(fā)送數(shù)據(jù)的長度 count。函數(shù)首先調(diào)用 func_detect_tcp_server_link 函數(shù)檢測連接狀態(tài),如果連接已斷開,則返回 -1。然后通過調(diào)用 write 函數(shù)將數(shù)據(jù)發(fā)送給客戶端,并返回實際發(fā)送的數(shù)據(jù)長度。如果發(fā)送的數(shù)據(jù)長度與指定的長度不一致,表示發(fā)送過程中出現(xiàn)錯誤,返回-1。

func_close_tcp_server_listen(int listen_fd): TCP 服務(wù)端關(guān)閉監(jiān)聽的函數(shù)。它接收一個監(jiān)聽文件描述符 listen_fd,并調(diào)用 close 函數(shù)關(guān)閉監(jiān)聽。

func_close_tcp_server_link(int fd): TCP 服務(wù)端關(guān)閉連接的函數(shù)。它接收一個連接文件描述符fd。

tcp_client.c

func_detect_tcp_client_link(int fd): 檢測 TCP 客戶端連接狀態(tài)的函數(shù)。它通過獲取套接字的 TCP 狀態(tài)信息,判斷連接是否已經(jīng)建立。如果連接狀態(tài)為 TCP_ESTABLISHED(已建立連接),則返回 0;否則返回 -1。

func_create_tcp_client_link(int *fd, char *ip, unsigned int port): TCP 客戶端與服務(wù)端建立連接的函數(shù)。它接受一個指向文件描述符的指針 fd,一個服務(wù)端 IP 地址字符串 ip,以及服務(wù)端端口號 port。函數(shù)首先創(chuàng)建一個套接字,然后設(shè)置服務(wù)器地址結(jié)構(gòu),嘗試與服務(wù)端建立連接。如果連接成功,返回 0;連接失敗返回 -1。

func_tcp_client_receive(int fd, char *p_receive_buff, int count): TCP 客戶端接收數(shù)據(jù)的函數(shù)。它接收一個文件描述符 fd,一個指向接收數(shù)據(jù)緩沖區(qū)的指針 p_receive_buff,以及最大接收長度 count。函數(shù)通過調(diào)用 recv 函數(shù)接收數(shù)據(jù),并返回實際接收到的數(shù)據(jù)長度。

func_tcp_client_send(int fd, char *p_send_buff, int count): TCP 客戶端發(fā)送數(shù)據(jù)的函數(shù)。它接收一個文件描述符 fd,一個指向發(fā)送數(shù)據(jù)緩沖區(qū)的指針 p_send_buff,以及發(fā)送數(shù)據(jù)長度 count。函數(shù)首先調(diào)用 func_detect_tcp_client_link 檢測連接狀態(tài),如果連接斷開,則返回 -1。否則,調(diào)用 write 函數(shù)發(fā)送數(shù)據(jù),并返回實際發(fā)送的數(shù)據(jù)長度。

func_close_tcp_client_link(int fd): TCP 客戶端關(guān)閉連接的函數(shù)。它接收一個文件描述符 fd,并調(diào)用 close 函數(shù)關(guān)閉連接。

udp協(xié)議程序

udp_server.c

func_create_udp_server(int *fd, unsigned int listen_port): UDP 服務(wù)端創(chuàng)建監(jiān)聽文件描述符的函數(shù)。它接受一個指向文件描述符的指針 fd,以及 UDP 服務(wù)端監(jiān)聽的端口號 listen_port。函數(shù)首先創(chuàng)建一個套接字,然后將其設(shè)置為非阻塞模式。接下來,設(shè)置服務(wù)器地址結(jié)構(gòu)并綁定套接字和端口。如果操作成功,返回 0;否則返回 -1。

func_udp_server_receive(int fd, char *p_receive_buff, int count, char *ip, unsigned int *port): UDP 服務(wù)端接收數(shù)據(jù)的函數(shù)。它接收一個文件描述符 fd,一個指向接收數(shù)據(jù)緩沖區(qū)的指針 p_receive_buff,數(shù)據(jù)最大接收長度 count,以及用于存儲客戶端 IP 和端口號的變量 ip 和 port。函數(shù)通過調(diào)用 recvfrom 函數(shù)接收數(shù)據(jù),并返回實際接收到的數(shù)據(jù)長度。同時,將客戶端的 IP 和端口號存儲到 ip 和 port 變量中。

func_udp_server_send(int fd, char *p_send_buff, int count, char *ip, unsigned int port): UDP 服務(wù)端發(fā)送數(shù)據(jù)的函數(shù)。它接收一個文件描述符 fd,一個指向發(fā)送數(shù)據(jù)緩沖區(qū)的指針 p_send_buff,發(fā)送數(shù)據(jù)長度 count,以及目標(biāo)客戶端的 IP 和端口號 ip 和 port。函數(shù)通過調(diào)用 sendto 函數(shù)將數(shù)據(jù)發(fā)送給指定的客戶端。

func_close_udp_server(int fd): UDP 服務(wù)端關(guān)閉連接的函數(shù)。它接收一個文件描述符 fd,并調(diào)用 close 函數(shù)關(guān)閉連接。

udp_client.c

func_create_udp_client_link(int *fd, char *ip, unsigned int port): UDP 客戶端創(chuàng)建文件描述符的函數(shù)。它接受一個指向文件描述符的指針 fd,UDP 服務(wù)端的 IP 地址 ip,以及 UDP 服務(wù)端的端口號 port。函數(shù)首先創(chuàng)建一個套接字,然后將其設(shè)置為非阻塞模式。如果操作成功,返回 0;否則返回 -1。

func_udp_client_receive(int fd, char *p_receive_buff, int count): UDP 客戶端接收數(shù)據(jù)的函數(shù)。它接收一個文件描述符 fd,一個指向接收數(shù)據(jù)緩沖區(qū)的指針 p_receive_buff,以及數(shù)據(jù)最大接收長度 count。函數(shù)通過調(diào)用 recvfrom 函數(shù)接收數(shù)據(jù),并返回實際接收到的數(shù)據(jù)長度。

func_udp_client_send(int fd, char *p_send_buff, int count, char *ip, unsigned int port): UDP 客戶端發(fā)送數(shù)據(jù)的函數(shù)。它接收一個文件描述符 fd,一個指向發(fā)送數(shù)據(jù)緩沖區(qū)的指針。 ???????

p_send_buff發(fā)送數(shù)據(jù)長度 count,以及 UDP 服務(wù)端的 IP 和端口號 ip 和 port。函數(shù)通過調(diào)用 sendto 函數(shù)將數(shù)據(jù)發(fā)送給指定的服務(wù)端。

func_close_udp_client_link(int fd): UDP 客戶端關(guān)閉連接的函數(shù)。它接收一個文件描述符 fd,并調(diào)用 close 函數(shù)關(guān)閉連接。

飛凌嵌入式

飛凌嵌入式

保定飛凌嵌入式技術(shù)有限公司,創(chuàng)建于2006年,是一家專注嵌入式核心控制系統(tǒng)研發(fā)、設(shè)計和生產(chǎn)的高新技術(shù)企業(yè),是國內(nèi)較早專業(yè)從事嵌入式技術(shù)的企業(yè)之一。 經(jīng)過十幾年的發(fā)展與積累,公司擁有業(yè)內(nèi)優(yōu)秀的軟硬件研發(fā)團(tuán)隊,在北京及保定建立兩大研發(fā)基地,在蘇州、深圳設(shè)有華東、華南技術(shù)服務(wù)中心,并在北美、歐洲以及亞太等其他國家和地區(qū)擁有國際業(yè)務(wù)網(wǎng)絡(luò)。公司研發(fā)的智能設(shè)備核心平臺廣泛應(yīng)用于物聯(lián)網(wǎng)、工控、軌道交通、醫(yī)療、電力、商業(yè)電子、智能家居、安防、機(jī)器人、環(huán)境監(jiān)測等諸多領(lǐng)域。

保定飛凌嵌入式技術(shù)有限公司,創(chuàng)建于2006年,是一家專注嵌入式核心控制系統(tǒng)研發(fā)、設(shè)計和生產(chǎn)的高新技術(shù)企業(yè),是國內(nèi)較早專業(yè)從事嵌入式技術(shù)的企業(yè)之一。 經(jīng)過十幾年的發(fā)展與積累,公司擁有業(yè)內(nèi)優(yōu)秀的軟硬件研發(fā)團(tuán)隊,在北京及保定建立兩大研發(fā)基地,在蘇州、深圳設(shè)有華東、華南技術(shù)服務(wù)中心,并在北美、歐洲以及亞太等其他國家和地區(qū)擁有國際業(yè)務(wù)網(wǎng)絡(luò)。公司研發(fā)的智能設(shè)備核心平臺廣泛應(yīng)用于物聯(lián)網(wǎng)、工控、軌道交通、醫(yī)療、電力、商業(yè)電子、智能家居、安防、機(jī)器人、環(huán)境監(jiān)測等諸多領(lǐng)域。收起

查看更多

相關(guān)推薦