0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux開(kāi)發(fā)_網(wǎng)絡(luò)編程、網(wǎng)絡(luò)通信介紹

DS小龍哥-嵌入式技術(shù) ? 2022-09-17 15:46 ? 次閱讀

【摘要】 介紹Linux網(wǎng)絡(luò)編程: TCP網(wǎng)絡(luò)編程、UDP網(wǎng)絡(luò)編程案例,完成數(shù)據(jù)互相發(fā)送。

任務(wù)1: 網(wǎng)頁(yè)視頻監(jiān)控

1.?學(xué)習(xí)網(wǎng)絡(luò)編程

2.?USB攝像頭

3.?HTTP協(xié)議: 搭建HTTP服務(wù)器。

??網(wǎng)絡(luò)編程------TCP/IP協(xié)議編程----一套軟件協(xié)議----->數(shù)據(jù)結(jié)構(gòu)。

pYYBAGMlOyeAVTNnAACXA9IWko0152.png

??網(wǎng)絡(luò)編程底層協(xié)議: (從網(wǎng)絡(luò)收發(fā)一個(gè)字節(jié))

1.?TCP協(xié)議(C/S): 點(diǎn)對(duì)點(diǎn)傳輸協(xié)議。數(shù)據(jù)傳輸可靠的。 適合傳輸大數(shù)據(jù)。

2.?UDP協(xié)議: 廣播方式傳輸協(xié)議 (對(duì)特定端口號(hào)進(jìn)行廣播)。數(shù)據(jù)相對(duì)TCP不可靠的。---不適合傳輸大數(shù)據(jù),傳輸小塊數(shù)據(jù)。

??網(wǎng)絡(luò)編程的上層協(xié)議:

1.?HTTP協(xié)議: 超文本傳輸協(xié)議----網(wǎng)絡(luò)使用。

2.?FTP協(xié)議: 文件傳輸協(xié)議---傳輸單文件。

3.?NFS協(xié)議: 文件傳輸協(xié)議----網(wǎng)絡(luò)文件系統(tǒng)。

??TCP協(xié)議編程:

1.?服務(wù)器: 等待客戶(hù)端連接。

2.?客戶(hù)端: 連接服務(wù)器。 QQ客戶(hù)端、xxx游戲客戶(hù)端。

poYBAGMlOyiAJKi8AAFwdCAi0iI791.pngpYYBAGMlOyiAPsWwAAEDiYXYfuo021.pngpoYBAGMlOyiAfnHpAAEK8xZpK1g676.png

網(wǎng)絡(luò)協(xié)議: 大端模式。

計(jì)算機(jī)IPV4的端口號(hào)范圍: 0~65535 。自己編寫(xiě)的程序端口號(hào): >1024

TCP服務(wù)器:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include           /* See NOTES */
#include 
#include 
#include  /* superset of previous */

#define PORT 1234

/*
TCP服務(wù)器創(chuàng)建:
1. 創(chuàng)建socket套接字
2. 綁定端口號(hào): 服務(wù)器創(chuàng)建
3. 設(shè)置監(jiān)聽(tīng)端口的數(shù)量: 服務(wù)器最大等待連接的客戶(hù)端總數(shù)量
4. 等待客戶(hù)端連接
*/
int main(int argc,char **argv)
{
	/*1. 創(chuàng)建套接字*/
	int server_fd=socket(AF_INET,SOCK_STREAM,0);
	if(server_fd<0)
	{
		printf("TCP服務(wù)器:創(chuàng)建套接字創(chuàng)建失敗!\n");
		return -1;
	}
	
	/*2. 綁定端口號(hào)*/
	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); //需要填大端格式的端口號(hào)數(shù)據(jù)
	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服務(wù)器:綁定端口號(hào)失敗!\n");
		return -2;
	}
	printf("struct sockaddr_in=%d\n",sizeof(struct sockaddr_in)); //16
	printf("struct sockaddr=%d\n",sizeof(struct sockaddr)); //16
	
	/*3. 設(shè)置監(jiān)聽(tīng)客戶(hù)端連接的數(shù)量*/
	listen(server_fd,50);
	
	/*4. 等待客戶(hù)端連接:阻塞*/
	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("服務(wù)器提示:等待客戶(hù)端連接出現(xiàn)錯(cuò)誤!\n");
		return 0;
	}
	
	/*5. 數(shù)據(jù)的通信*/
	char buff[]="1234567890";
	int cnt=write(client_fd,buff,strlen(buff)+1);
	printf("發(fā)送:%d,%s\n",cnt,buff);
	/*6. 關(guān)閉服務(wù)器套接字*/
	close(server_fd);
	return 0;
}

TCP客戶(hù)端:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include           /* See NOTES */
#include 
#include 
#include  /* superset of previous */

#define PORT 1234

/*
TCP客戶(hù)端:
1. 創(chuàng)建socket套接字
2. 連接指定TCP服務(wù)器
*/
int main(int argc,char **argv)
{
	if(argc!=2)
	{
		printf("./app server_ip\n");
		return 0;
	}
	/*1. 創(chuàng)建套接字*/
	int client_fd=socket(AF_INET,SOCK_STREAM,0);
	if(client_fd<0)
	{
		printf("TCP客戶(hù)端:創(chuàng)建套接字創(chuàng)建失敗!\n");
		return -1;
	}
	
	/*2. 連接服務(wù)器*/
	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); //需要填大端格式的端口號(hào)數(shù)據(jù)
	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("連接服務(wù)器失敗!\n");
		return -2;
	}
	
	/*3. 數(shù)據(jù)的通信*/
	char buff[100];
	int cnt=read(client_fd,buff,100);
	printf("接收的數(shù)據(jù):%d,%s\n",cnt,buff);
	
	/*4. 關(guān)閉服務(wù)器套接字*/
	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服務(wù)器創(chuàng)建:
1. 創(chuàng)建socket套接字
2. 綁定端口號(hào): 服務(wù)器創(chuàng)建
3. 等待接收數(shù)據(jù)
*/

int main(int argc,char **argv)
{
	/*1. 創(chuàng)建套接字*/
	int server_fd=socket(AF_INET,SOCK_DGRAM,0);
	if(server_fd<0)
	{
		printf("UDP服務(wù)器:創(chuàng)建套接字創(chuàng)建失敗!\n");
		return -1;
	}
	
	/*2. 綁定端口號(hào)*/
	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); //需要填大端格式的端口號(hào)數(shù)據(jù)
	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服務(wù)器:綁定端口號(hào)失敗!\n");
		return -2;
	}
	
	/*3. 等待數(shù)據(jù)接收*/
	char buff[1024];
	struct sockaddr_in client_addr;
	int addrlen=sizeof(struct sockaddr_in);
	int recv_len;
	while(1)
	{
		//阻塞方式接收客戶(hù)端發(fā)來(lái)的數(shù)據(jù)
		recv_len=recvfrom(server_fd,buff,1024,0,(struct sockaddr *)&client_addr,&addrlen);
		printf("RX=%d,%s\n",recv_len,buff);
		//printf();
	}
	/*4. 關(guān)閉服務(wù)器套接字*/
	close(server_fd);
	return 0;
}

UDP發(fā)送端:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include           /* See NOTES */
#include 
#include 
#include  /* superset of previous */

#define PORT 1234

/*
TDP客戶(hù)端:
1. 創(chuàng)建socket套接字
2. 向指定地址發(fā)送數(shù)據(jù)
*/
int main(int argc,char **argv)
{
	if(argc!=2)
	{
		printf("./app server_ip\n");
		return 0;
	}
	/*1. 創(chuàng)建套接字*/
	int client_fd=socket(AF_INET,SOCK_DGRAM,0);
	if(client_fd<0)
	{
		printf("TCP客戶(hù)端:創(chuàng)建套接字創(chuàng)建失敗!\n");
		return -1;
	}
	
	/*2. 向UDP服務(wù)器發(fā)送數(shù)據(jù)*/
	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); //需要填大端格式的端口號(hào)數(shù)據(jù)
	server_addr.sin_addr.s_addr=inet_addr(argv[1]);
	
	while(1)
	{
		//向服務(wù)器發(fā)送數(shù)據(jù)
		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. 關(guān)閉客戶(hù)端套接字*/
	close(client_fd);
	return 0;
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1337

    瀏覽量

    78863
  • UDP
    UDP
    +關(guān)注

    關(guān)注

    0

    文章

    318

    瀏覽量

    33832
  • 網(wǎng)絡(luò)通信
    +關(guān)注

    關(guān)注

    4

    文章

    774

    瀏覽量

    29728
  • 網(wǎng)絡(luò)編程
    +關(guān)注

    關(guān)注

    0

    文章

    66

    瀏覽量

    10048
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux網(wǎng)絡(luò)協(xié)議棧的實(shí)現(xiàn)

    網(wǎng)絡(luò)協(xié)議棧是操作系統(tǒng)核心的一個(gè)重要組成部分,負(fù)責(zé)管理網(wǎng)絡(luò)通信中的數(shù)據(jù)包處理。在 Linux 操作系統(tǒng)中,網(wǎng)絡(luò)協(xié)議棧(Network Stack)負(fù)責(zé)實(shí)現(xiàn) TCP/IP 協(xié)議簇,處理應(yīng)用
    的頭像 發(fā)表于 09-10 09:51 ?194次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>網(wǎng)絡(luò)</b>協(xié)議棧的實(shí)現(xiàn)

    YXC可編程晶振,頻點(diǎn)156.25MHZ,3225封裝,適用與AI網(wǎng)絡(luò)通信設(shè)備

    隨著技術(shù)的發(fā)展,數(shù)據(jù)傳輸速率越來(lái)越高,晶振的頻率可以根據(jù)需要進(jìn)行調(diào)整,以適應(yīng)不同的數(shù)據(jù)傳輸速率,YSO690PR系列的特點(diǎn)是可編程,1-200MHz頻率任意編程,并精確輸出到小數(shù)點(diǎn)后6位,優(yōu)化系統(tǒng)性能,晶振的穩(wěn)定性有助于優(yōu)化AI網(wǎng)絡(luò)通信
    的頭像 發(fā)表于 08-08 15:41 ?244次閱讀
    YXC可<b class='flag-5'>編程</b>晶振,頻點(diǎn)156.25MHZ,3225封裝,適用與AI<b class='flag-5'>網(wǎng)絡(luò)通信</b>設(shè)備

    探索光耦技術(shù)在5G網(wǎng)絡(luò)通信的創(chuàng)新應(yīng)用

    5G網(wǎng)絡(luò)通信經(jīng)過(guò)多年的高速發(fā)展,仍有一些技術(shù)痛點(diǎn)未能解決,其技術(shù)痛點(diǎn)主要包括網(wǎng)絡(luò)覆蓋范圍與信號(hào)質(zhì)量、高頻段通信與設(shè)備兼容性、關(guān)鍵技術(shù)不夠成熟以及核心器件依賴(lài)進(jìn)口等方面。光耦技術(shù)在解決這些5G網(wǎng)
    的頭像 發(fā)表于 06-26 09:31 ?450次閱讀
    探索光耦技術(shù)在5G<b class='flag-5'>網(wǎng)絡(luò)通信</b>的創(chuàng)新應(yīng)用

    一個(gè)沒(méi)有mesh協(xié)議的ble設(shè)備,如何通過(guò)gatt協(xié)議與mesh網(wǎng)絡(luò)通信?

    一個(gè)沒(méi)有mesh協(xié)議的ble設(shè)備,如何通過(guò)gatt協(xié)議與mesh網(wǎng)絡(luò)通信,代理節(jié)點(diǎn)需要調(diào)用需要調(diào)用那些接口進(jìn)行轉(zhuǎn)換。mesh網(wǎng)絡(luò)中的代理節(jié)點(diǎn)如何轉(zhuǎn)換gatt服務(wù)的消息的。ESP-IDF是否有提供相應(yīng)的demo。
    發(fā)表于 06-24 07:52

    SDWAN技術(shù)是否會(huì)增加網(wǎng)絡(luò)安全風(fēng)險(xiǎn)?SD-WAN如何確保網(wǎng)絡(luò)通信的安全性?

    SDWAN技術(shù)是否會(huì)增加網(wǎng)絡(luò)安全風(fēng)險(xiǎn)?SD-WAN如何確保網(wǎng)絡(luò)通信的安全性? SDWAN技術(shù)的廣泛應(yīng)用為企業(yè)網(wǎng)絡(luò)帶來(lái)了更大的靈活性和可擴(kuò)展性,但同時(shí)也帶來(lái)了一些安全風(fēng)險(xiǎn)。在談?wù)揝DWAN如何確保
    的頭像 發(fā)表于 03-27 16:57 ?728次閱讀

    Linux網(wǎng)絡(luò)編程

    :面向報(bào)文,不可靠,(類(lèi)似于雙方發(fā)短信),適用于數(shù)據(jù)量大且不需要準(zhǔn)確傳輸 進(jìn)程間通信是基于Linux內(nèi)核的,不適用于兩臺(tái)手機(jī)之間的通信。 ? 字節(jié)序: 小端:將低序字節(jié)存儲(chǔ)在起始地址 大端:將高序字節(jié)存儲(chǔ)在起始地址 電腦是小端字
    的頭像 發(fā)表于 03-26 10:58 ?269次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>網(wǎng)絡(luò)</b><b class='flag-5'>編程</b>

    時(shí)鐘同步系統(tǒng)在網(wǎng)絡(luò)通信中的重要性及優(yōu)勢(shì)

    時(shí)鐘同步是指多個(gè)設(shè)備或系統(tǒng)之間的時(shí)間保持一致。在網(wǎng)絡(luò)通信中,時(shí)鐘同步系統(tǒng)至關(guān)重要,它可以確保網(wǎng)絡(luò)通信的準(zhǔn)確性和可靠性。 時(shí)鐘同步系統(tǒng)在網(wǎng)絡(luò)通信中的重要性 保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性 在網(wǎng)絡(luò)通信
    的頭像 發(fā)表于 03-19 10:35 ?950次閱讀
    時(shí)鐘同步系統(tǒng)在<b class='flag-5'>網(wǎng)絡(luò)通信</b>中的重要性及優(yōu)勢(shì)

    5G網(wǎng)絡(luò)通信有哪些技術(shù)痛點(diǎn)?光耦技術(shù)在5G網(wǎng)絡(luò)通信的應(yīng)用

    5G網(wǎng)絡(luò)通信有哪些技術(shù)痛點(diǎn)?光耦技術(shù)在5G網(wǎng)絡(luò)通信的應(yīng)用? 5G網(wǎng)絡(luò)通信的技術(shù)痛點(diǎn): 1. 頻譜資源短缺:5G通信需要更高的頻譜資源來(lái)支持更大的數(shù)據(jù)傳輸量和更高的速度,但是目前無(wú)線
    的頭像 發(fā)表于 02-18 17:13 ?798次閱讀

    網(wǎng)絡(luò)通信技術(shù)分為哪三個(gè)層次

    網(wǎng)絡(luò)通信技術(shù)分為物理層、數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層三個(gè)層次。每個(gè)層次都有不同的功能和任務(wù),它們協(xié)同工作,確保數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸和接收。以下是關(guān)于網(wǎng)絡(luò)通信技術(shù)各個(gè)層次的詳細(xì)解釋?zhuān)约叭绾螀f(xié)同工作
    的頭像 發(fā)表于 12-20 09:13 ?2012次閱讀

    網(wǎng)絡(luò)通信方面,有哪些新技術(shù)或趨勢(shì)值得關(guān)注?

    網(wǎng)絡(luò)通信方面,有許多新技術(shù)和趨勢(shì)值得關(guān)注。以下是一些可能對(duì)您有幫助的回答。
    的頭像 發(fā)表于 11-28 14:04 ?4896次閱讀

    Linux網(wǎng)絡(luò)基本配置與管理

    Linux是一種開(kāi)源操作系統(tǒng),被廣泛用于服務(wù)器和網(wǎng)絡(luò)設(shè)備中。在Linux中,網(wǎng)絡(luò)配置和管理是一個(gè)重要且復(fù)雜的任務(wù)。本篇文章將詳細(xì)介紹
    的頭像 發(fā)表于 11-27 16:51 ?777次閱讀

    傳感器網(wǎng)絡(luò)通信基礎(chǔ)知識(shí)

    電子發(fā)燒友網(wǎng)站提供《傳感器網(wǎng)絡(luò)通信基礎(chǔ)知識(shí).pdf》資料免費(fèi)下載
    發(fā)表于 11-15 11:50 ?0次下載
    傳感器<b class='flag-5'>網(wǎng)絡(luò)通信</b>基礎(chǔ)知識(shí)

    Socket 網(wǎng)絡(luò)編程框架介紹

    Socket 網(wǎng)絡(luò)編程框架 Socket(套接字)是一個(gè)網(wǎng)絡(luò)編程概念,描述了一個(gè)通信端點(diǎn)(Endpoint),用于建立
    的頭像 發(fā)表于 11-09 14:19 ?947次閱讀
    Socket <b class='flag-5'>網(wǎng)絡(luò)</b><b class='flag-5'>編程</b>框架<b class='flag-5'>介紹</b>

    單片機(jī)與Internct網(wǎng)絡(luò)通信的一種具體實(shí)現(xiàn)方案

    電子發(fā)燒友網(wǎng)站提供《單片機(jī)與Internct網(wǎng)絡(luò)通信的一種具體實(shí)現(xiàn)方案.pdf》資料免費(fèi)下載
    發(fā)表于 10-25 10:40 ?3次下載
    單片機(jī)與Internct<b class='flag-5'>網(wǎng)絡(luò)通信</b>的一種具體實(shí)現(xiàn)方案

    基于AT89C55WD單片機(jī)的網(wǎng)絡(luò)通信設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于AT89C55WD單片機(jī)的網(wǎng)絡(luò)通信設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-25 10:37 ?3次下載
    基于AT89C55WD單片機(jī)的<b class='flag-5'>網(wǎng)絡(luò)通信</b>設(shè)計(jì)