【摘要】 介紹Linux網絡編程: TCP網絡編程、UDP網絡編程案例,完成數據互相發送。
任務1: 網頁視頻監控
1.?學習網絡編程
2.?USB攝像頭
3.?HTTP協議: 搭建HTTP服務器。
??網絡編程------TCP/IP協議編程----一套軟件協議----->數據結構。

??網絡編程底層協議: (從網絡收發一個字節)
1.?TCP協議(C/S): 點對點傳輸協議。數據傳輸可靠的。 適合傳輸大數據。
2.?UDP協議: 廣播方式傳輸協議 (對特定端口號進行廣播)。數據相對TCP不可靠的。---不適合傳輸大數據,傳輸小塊數據。
??網絡編程的上層協議:
1.?HTTP協議: 超文本傳輸協議----網絡使用。
2.?FTP協議: 文件傳輸協議---傳輸單文件。
3.?NFS協議: 文件傳輸協議----網絡文件系統。
??TCP協議編程:
1.?服務器: 等待客戶端連接。
2.?客戶端: 連接服務器。 QQ客戶端、xxx游戲客戶端。



網絡協議: 大端模式。
計算機IPV4的端口號范圍: 0~65535 。自己編寫的程序端口號: >1024
TCP服務器:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include /* See NOTES */
#include
#include
#include /* superset of previous */
#define PORT 1234
/*
TCP服務器創建:
1. 創建socket套接字
2. 綁定端口號: 服務器創建
3. 設置監聽端口的數量: 服務器最大等待連接的客戶端總數量
4. 等待客戶端連接
*/
int main(int argc,char **argv)
{
/*1. 創建套接字*/
int server_fd=socket(AF_INET,SOCK_STREAM,0);
if(server_fd<0)
{
printf("TCP服務器:創建套接字創建失敗!\n");
return -1;
}
/*2. 綁定端口號*/
struct sockaddr_in server_addr;
memset(&server_addr,0,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET; //IPV4
server_addr.sin_port=htons(PORT); //需要填大端格式的端口號數據
server_addr.sin_addr.s_addr=0;//inet_addr("192.168.18.3");
/*0=inet_addr("0.0.0.0") ---表示本地所有IP地址*/
if(bind(server_fd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr_in))!=0)
{
printf("TCP服務器:綁定端口號失敗!\n");
return -2;
}
printf("struct sockaddr_in=%d\n",sizeof(struct sockaddr_in)); //16
printf("struct sockaddr=%d\n",sizeof(struct sockaddr)); //16
/*3. 設置監聽客戶端連接的數量*/
listen(server_fd,50);
/*4. 等待客戶端連接:阻塞*/
struct sockaddr_in client_addr;
int addrlen=sizeof(struct sockaddr_in);
int client_fd=accept(server_fd,(struct sockaddr *)&client_addr,&addrlen);
if(client_fd<0)
{
printf("服務器提示:等待客戶端連接出現錯誤!\n");
return 0;
}
/*5. 數據的通信*/
char buff[]="1234567890";
int cnt=write(client_fd,buff,strlen(buff)+1);
printf("發送:%d,%s\n",cnt,buff);
/*6. 關閉服務器套接字*/
close(server_fd);
return 0;
}
TCP客戶端:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include /* See NOTES */
#include
#include
#include /* superset of previous */
#define PORT 1234
/*
TCP客戶端:
1. 創建socket套接字
2. 連接指定TCP服務器
*/
int main(int argc,char **argv)
{
if(argc!=2)
{
printf("./app server_ip\n");
return 0;
}
/*1. 創建套接字*/
int client_fd=socket(AF_INET,SOCK_STREAM,0);
if(client_fd<0)
{
printf("TCP客戶端:創建套接字創建失敗!\n");
return -1;
}
/*2. 連接服務器*/
struct sockaddr_in server_addr;
memset(&server_addr,0,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET; //IPV4
server_addr.sin_port=htons(PORT); //需要填大端格式的端口號數據
server_addr.sin_addr.s_addr=inet_addr(argv[1]);
if(connect(client_fd,(const struct sockaddr *)&server_addr,sizeof(struct sockaddr_in))!=0)
{
printf("連接服務器失敗!\n");
return -2;
}
/*3. 數據的通信*/
char buff[100];
int cnt=read(client_fd,buff,100);
printf("接收的數據:%d,%s\n",cnt,buff);
/*4. 關閉服務器套接字*/
close(client_fd);
return 0;
}
UDP接收端:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include /* See NOTES */
#include
#include
#include /* superset of previous */
#define PORT 1234
/*
UDP服務器創建:
1. 創建socket套接字
2. 綁定端口號: 服務器創建
3. 等待接收數據
*/
int main(int argc,char **argv)
{
/*1. 創建套接字*/
int server_fd=socket(AF_INET,SOCK_DGRAM,0);
if(server_fd<0)
{
printf("UDP服務器:創建套接字創建失敗!\n");
return -1;
}
/*2. 綁定端口號*/
struct sockaddr_in server_addr;
memset(&server_addr,0,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET; //IPV4
server_addr.sin_port=htons(PORT); //需要填大端格式的端口號數據
server_addr.sin_addr.s_addr=0;//inet_addr("192.168.18.3");
/*0=inet_addr("0.0.0.0") ---表示本地所有IP地址*/
if(bind(server_fd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr_in))!=0)
{
printf("UDP服務器:綁定端口號失敗!\n");
return -2;
}
/*3. 等待數據接收*/
char buff[1024];
struct sockaddr_in client_addr;
int addrlen=sizeof(struct sockaddr_in);
int recv_len;
while(1)
{
//阻塞方式接收客戶端發來的數據
recv_len=recvfrom(server_fd,buff,1024,0,(struct sockaddr *)&client_addr,&addrlen);
printf("RX=%d,%s\n",recv_len,buff);
//printf();
}
/*4. 關閉服務器套接字*/
close(server_fd);
return 0;
}
UDP發送端:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include /* See NOTES */
#include
#include
#include /* superset of previous */
#define PORT 1234
/*
TDP客戶端:
1. 創建socket套接字
2. 向指定地址發送數據
*/
int main(int argc,char **argv)
{
if(argc!=2)
{
printf("./app server_ip\n");
return 0;
}
/*1. 創建套接字*/
int client_fd=socket(AF_INET,SOCK_DGRAM,0);
if(client_fd<0)
{
printf("TCP客戶端:創建套接字創建失敗!\n");
return -1;
}
/*2. 向UDP服務器發送數據*/
char buff[]="1234567890";
int send_len;
struct sockaddr_in server_addr;
memset(&server_addr,0,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET; //IPV4
server_addr.sin_port=htons(PORT); //需要填大端格式的端口號數據
server_addr.sin_addr.s_addr=inet_addr(argv[1]);
while(1)
{
//向服務器發送數據
send_len=sendto(client_fd,buff,strlen(buff)+1,0,(const struct sockaddr *)&server_addr,sizeof(struct sockaddr_in));
printf("TX:%d,%s\n",send_len,buff);
sleep(1);
}
/*3. 關閉客戶端套接字*/
close(client_fd);
return 0;
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
TCP
+關注
關注
8文章
1424瀏覽量
83501 -
UDP
+關注
關注
0文章
334瀏覽量
35412 -
網絡通信
+關注
關注
4文章
840瀏覽量
32558 -
網絡編程
+關注
關注
0文章
73瀏覽量
11108
發布評論請先 登錄
相關推薦
熱點推薦
攻克網絡通信時鐘挑戰:高性能差分晶振解決方案
,正成為應對高端網絡通信時鐘挑戰的關鍵解決方案。一、DXO差分輸出振蕩器優勢差分晶振相較于傳統單端(CMOS)晶振能夠顯著提升系統性能,主要體現在:抗干擾能力強:
芯動科技與雄立科技合作高性能100G網絡通信芯片一次流片成功
近日,一站式IP和芯片定制賦能型領軍企業——芯動科技宣布,與國內全棧網絡通信芯片和解決方案提供商——雄立科技攜手合作的高性能100G網絡通信芯片,一次流片成功,實現規模化量產商用。
COM20019I 3.3V:工業網絡通信的理想選擇
COM20019I 3.3V:工業網絡通信的理想選擇 在工業自動化和嵌入式控制領域,可靠且高效的網絡通信至關重要。SMSC的COM20019I 3.3V ARCNET控制器憑借其出色的性能和豐
全雙工網狀網絡通信:為大型區域系統提供動力!
全雙工網狀網絡通信實現真正的同步雙向語音、八路并發傳輸、長達7公里 LoRa 鏈路、動態路由與自組織 SON 架構,提供低延遲、高可靠性與強覆蓋的專業無線通信解決方案。
5G網絡通信有哪些技術痛點?
,這些技術使得5G網絡能夠滿足未來物聯網、智能制造、自動駕駛等領域對高速、低時延、高可靠性的通信需求。
5G網絡通信有哪些技術痛點?
5G網絡通信經過多年的高速發展,仍有一些技術痛點
發表于 12-02 06:05
網段隔離器實現靜態NAT網絡通信
在許多網絡場景中,不同網段之間需要進行通信,但又要保證各網段的相對獨立性和安全性。如果缺少網絡規劃與網段隔離,會使網絡面臨巨大的安全風險,各類網絡
Linux系統中網絡配置詳解
網絡配置是Linux系統運維中的核心技能之一。正確理解和配置子網掩碼、網關等網絡參數,直接影響系統的網絡連通性和性能。本文將深入探討Linux
【嘉楠堪智K230開發板試用體驗】網絡收發信息
本次實驗通過在 K230 上實現基于
Socket 的 TCP 客戶端通信,成功與電腦服務器建立連接并實現數據收發。掌握了 Socket 編程的基本流程,加深了對 TCP/IP 協議和網絡通信機制的理解,為后續
發表于 07-13 08:13
基于RK3576開發板的以太網口網絡通信
本文著重介紹如何通過配置文件配合命令行來修改網絡參數,以及如何通過程序來修改配置文件。若用戶僅想了解如何【通過桌面窗口】配置網絡,或者想知道【為什么】debian系統采用NetworkManager這種方式配置
Linux常用命令大全
Linux常用命令是指在Linux操作系統中廣泛使用的命令工具,這些命令工具可以完成各種不同的任務,如管理文件和目錄、操作進程、網絡通信、軟件安裝等。
愛普生SG3225EEN低抖動差分晶振在網絡通信的應用
在當今數字化時代,網絡通信的飛速發展對數據傳輸的準確性、穩定性和高效性提出了極為嚴苛的要求。從5G通信網絡的大規模部署,到數據中心的海量數據交換,再到智能家居系統的互聯互通,每一個環節都離不開精準
智多晶LWIP網絡通信系統介紹
在物聯網蓬勃興起的當下,嵌入式設備的網絡通信能力如同為其插上了騰飛的翅膀,使其能夠自由穿梭于信息的浩瀚海洋。而 LWIP,宛如一位身姿矯健的輕騎兵,在資源有限的嵌入式系統中飛馳,輕松完成各種復雜的網絡通信任務。西安智多晶微電子有限公司的LWIP
Linux開發_網絡編程、網絡通信介紹
評論