• 正文
    • tcp協議程序
    • udp協議程序
  • 相關推薦
申請入駐 產業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-網絡編程示例之網絡socket程序編程

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

注意:學習資料可在ElfBoard官方網站“資料”專區(qū)獲取。

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

tcp協議程序

tcp_server.c

服務端仍然是按照如下順序進行編寫:

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

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

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

accept()//允許連接;

read()/write()//進行數據交換;

close()//斷開連接;

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

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

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

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

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

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

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

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

tcp_client.c

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

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

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

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

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

udp協議程序

udp_server.c

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

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

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

func_close_udp_server(int fd): UDP 服務端關閉連接的函數。它接收一個文件描述符 fd,并調用 close 函數關閉連接。

udp_client.c

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

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

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

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

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

飛凌嵌入式

飛凌嵌入式

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

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

查看更多

相關推薦