chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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ò)編程基礎(chǔ)(1)

DS小龍哥-嵌入式技術(shù) ? 2022-09-17 15:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

【摘要】 補(bǔ)充進(jìn)程通信的知識(shí)點(diǎn),介紹網(wǎng)絡(luò)編程基礎(chǔ),完成服務(wù)器、客戶端創(chuàng)建,實(shí)現(xiàn)服務(wù)器與客戶端之間的基本通信。

任務(wù)1:進(jìn)程

(1)?進(jìn)程的創(chuàng)建和管理

(2)?命名管道與無(wú)名管道基本運(yùn)用

(3)?信號(hào)的接收和發(fā)送(鬧鐘的信號(hào))

#include 
#include 

/*信號(hào)處理函數(shù)*/
void sighandler(int signal_num)
{
	alarm(1);
	printf("SIGNAL:%d\n",signal_num);
}

int main(int argc,char **argv)
{
	/*綁定信號(hào)到特定的函數(shù)*/
	signal(SIGALRM,sighandler);
	alarm(1); //設(shè)置鬧鐘
	while(1)
	{
		
	}
	return 0;
}

需求:通過(guò)C語(yǔ)言代碼獲取其他進(jìn)程(c語(yǔ)言代碼、Shell腳本)的返回值。

(1)?system(“l(fā)s -l >123.txt”); //重定向輸出

(2)?popen標(biāo)準(zhǔn)管道;

#include

FILE *popen(const char *command, const char *type);

參數(shù)解析:

const char *command:就是需要執(zhí)行的命令,就是可執(zhí)行程序。例如: “l(fā)s -l” “./a.out”

const char *type: “w”寫(xiě) “r”讀

int pclose(FILE *stream);

無(wú)名管道:

fds[0] 表示讀

fds[1] 表示寫(xiě)

int dup2(int oldfd, int newfd); //實(shí)現(xiàn)文件描述符的重定向

示例: dup2(fds[1],1); //將本程序的標(biāo)準(zhǔn)輸出定義到管道的寫(xiě)端

標(biāo)準(zhǔn)輸入:0

標(biāo)準(zhǔn)輸出:1

標(biāo)準(zhǔn)錯(cuò)誤:2

FIFO文件是否可以在創(chuàng)建? 不可在掛載的目錄下創(chuàng)建。

任務(wù)2:網(wǎng)絡(luò)編程

管道: 運(yùn)用多個(gè)進(jìn)程之間的通信。

socket網(wǎng)絡(luò)編程:運(yùn)用于多個(gè)設(shè)備之間通信。

Socket網(wǎng)絡(luò)編程實(shí)際對(duì)TCP/IP協(xié)議進(jìn)行編程。

TCP/IP協(xié)議:

底層協(xié)議:TCP\UDP

上層協(xié)議:HTTP、FTP、NFS……..

??學(xué)習(xí)網(wǎng)絡(luò)編程需要了解的概念:

1.?能夠傳輸網(wǎng)絡(luò)數(shù)據(jù)的方式: 以太網(wǎng)有線網(wǎng)卡、無(wú)線網(wǎng)卡WIFI

2.?了解網(wǎng)絡(luò)協(xié)議:如何區(qū)分?jǐn)?shù)據(jù)是發(fā)給誰(shuí)的。

3.?IP地址:同一個(gè)局域網(wǎng)內(nèi),每臺(tái)電腦的IP地址不一樣。

IP地址:區(qū)分每臺(tái)電腦。

4.?端口號(hào):同一個(gè)電腦內(nèi),區(qū)分不同的應(yīng)用程序。

192.168.1.18:8585

5. TCP協(xié)議:點(diǎn)對(duì)點(diǎn)協(xié)議(打電話),數(shù)據(jù)丟包會(huì)自動(dòng)重發(fā),傳輸比較穩(wěn)定。

TCP協(xié)議有3次握手的過(guò)程,建立通信的基礎(chǔ)。

一般適用于:FTP文件傳輸、HTTP網(wǎng)頁(yè)數(shù)據(jù)傳輸?shù)鹊取?

TCP協(xié)議通信中區(qū)分服務(wù)器與客戶端:

服務(wù)器必須先存在,客戶端才可以連接。(網(wǎng)絡(luò)游戲)

客戶端與客戶端之間可以通信?必須通過(guò)服務(wù)器—模式就是(C/S)

5.?UDP協(xié)議:廣播方式協(xié)議(上課一樣)。

特性就是:實(shí)時(shí)性

一般適用于:視頻傳輸、視頻監(jiān)控…..QQ視頻

UDP協(xié)議不區(qū)分服務(wù)器與客戶端,發(fā)送數(shù)據(jù)的就是服務(wù)器,接收數(shù)據(jù)的就是客戶端。

6.?數(shù)據(jù)的大小端模式。電腦上的數(shù)據(jù)一般都是小端模式,網(wǎng)絡(luò)數(shù)據(jù)大端模式。

7.?Socket編程與文件操作原理是一樣。一切皆文件!

??TCP服務(wù)器創(chuàng)建流程

1.?調(diào)用socket函數(shù)創(chuàng)建網(wǎng)絡(luò)通信套接字(用法與open類似)。

2.?調(diào)用bind綁定端口的函數(shù)(填充必須要結(jié)構(gòu)體成員),創(chuàng)建服務(wù)器。

3.?設(shè)置監(jiān)聽(tīng)端口的數(shù)量(設(shè)置最大能夠連接的客戶端數(shù)量)

4.?調(diào)用accept等待

5.?調(diào)用read或者write函數(shù)進(jìn)行基本通信

??TCP客戶端創(chuàng)建流程

1.?調(diào)用socket函數(shù)創(chuàng)建網(wǎng)絡(luò)通信套接字(用法與open類似)。

2.?調(diào)用Connect函數(shù)連接指定的服務(wù)器

3.?調(diào)用read或者write函數(shù)進(jìn)行基本通信

?? 練習(xí)

1.?實(shí)現(xiàn)服務(wù)器與客戶端之間的基本通信,收發(fā)數(shù)據(jù)

客戶端:

#include 
#include 
#include 
#include 
#include 
#include 

/*
TCP服務(wù)器:
1. sockt創(chuàng)建套接字
2. bind綁定端口
3. 設(shè)置監(jiān)聽(tīng)的數(shù)量
4. 等待客戶端連接
*/
int socket_sfd; /*保存了服務(wù)器端的套接字*/
int socket_cfd; /*已經(jīng)連接成功的客戶端套接字*/

int main(int argc,char **argv)
{
	if(argc!=3)
	{
		printf("./server <192.168.xx.xx 本地IP地址> <服務(wù)器端口號(hào)>\n");
		exit(-1);
	}
	
	int err; //存放返回值狀態(tài)
	/*1. 創(chuàng)建套接字*/
	socket_sfd=socket(AF_INET,SOCK_STREAM,0);
	if(socket_sfd<0)
	{
		printf("服務(wù)器端創(chuàng)建失敗!\n");
		exit(-1);
	}
	
	/*2. 綁定端口*/
	struct sockaddr_in ServerAddr;
	ServerAddr.sin_family=AF_INET; //IPV4協(xié)議
	ServerAddr.sin_port=htons(atoi(argv[2]));      //服務(wù)器的端口號(hào) 最大值65535
	ServerAddr.sin_addr.s_addr=inet_addr(argv[1]); //IP地址賦值
	err=bind(socket_sfd,(const struct sockaddr *)&ServerAddr,sizeof(struct sockaddr));
	if(err!=0)
	{
		printf("服務(wù)器端 端口綁定失敗!\n");
		exit(-1);
	}
	
	/*3. 設(shè)置監(jiān)聽(tīng)的數(shù)量*/
	listen(socket_sfd,10);
	
	/*4. 等待客戶端連接*/
	struct sockaddr_in ClientAddr; //存放已經(jīng)連接成功客戶端信息
	socklen_t addrlen=sizeof(struct sockaddr);    //客戶端的地址長(zhǎng)度
	socket_cfd=accept(socket_sfd,(struct sockaddr *)&ClientAddr,&addrlen);
	if(socket_cfd<0)
	{
		printf("服務(wù)器端,連接客戶端失敗!\r\n");
		exit(-1);
	}
	
	/*打印一些客戶端的信息*/
	printf("成功連接的客戶端端口號(hào):%d\n",ntohs(ClientAddr.sin_port));
	printf("成功連接的客戶端IP地址:%s\n",inet_ntoa(ClientAddr.sin_addr));
	
	/*5. 收發(fā)數(shù)據(jù) :服務(wù)器給客戶端發(fā)送10個(gè)字節(jié)的數(shù)據(jù)*/
	err=write(socket_cfd,"123456789",10);
	printf("服務(wù)器成功發(fā)送:%d 字節(jié)\r\n",err);
	return 0;
}

2.?實(shí)現(xiàn)服務(wù)器與客戶端之間的文件傳輸。(單個(gè)文件傳輸)

聲明:本文內(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)投訴
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6369

    瀏覽量

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

    關(guān)注

    0

    文章

    72

    瀏覽量

    10935
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    DR1平臺(tái)Linux應(yīng)用開(kāi)發(fā)指南:含GDB調(diào)試、Python及MQTT實(shí)戰(zhàn)

    本文為創(chuàng)龍科技DR1 系列評(píng)估板 Linux 應(yīng)用開(kāi)發(fā)手冊(cè),系統(tǒng)講解開(kāi)發(fā)環(huán)境搭建、GDB 調(diào)試、多類型應(yīng)用案例及 MQTT 通信實(shí)現(xiàn)。核心內(nèi)容包括 LinuxSDK 與工具鏈配置、GD
    的頭像 發(fā)表于 01-05 16:48 ?3859次閱讀
    DR<b class='flag-5'>1</b>平臺(tái)<b class='flag-5'>Linux</b>應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b>指南:含GDB調(diào)試、Python及MQTT實(shí)戰(zhàn)

    Linux驅(qū)動(dòng)開(kāi)發(fā)的必備知識(shí)

    內(nèi)核基礎(chǔ)知識(shí): 1、熟悉 Linux 內(nèi)核的架構(gòu)、模塊系統(tǒng)、進(jìn)程管理、內(nèi)存管理等。 了解內(nèi)核的編譯和加載過(guò)程。 2、C編程技能: 精通 C 語(yǔ)言編程,包括指針操作、內(nèi)存管理、結(jié)
    發(fā)表于 12-04 07:58

    基于 DR1M90 的 Linux-RT 內(nèi)核開(kāi)發(fā):從編譯配置到 GPIO / 按鍵應(yīng)用實(shí)現(xiàn)(1

    本手冊(cè)由創(chuàng)龍科技研發(fā),針對(duì) DR1M90,詳述 Linux-RT 實(shí)時(shí)內(nèi)核開(kāi)發(fā):含實(shí)時(shí)性測(cè)試(LinuxLinux-RT 對(duì)比、CPU
    的頭像 發(fā)表于 12-02 10:38 ?1077次閱讀
    基于 DR<b class='flag-5'>1</b>M90 的 <b class='flag-5'>Linux</b>-RT 內(nèi)核<b class='flag-5'>開(kāi)發(fā)</b>:從編譯配置到 GPIO / 按鍵應(yīng)用實(shí)現(xiàn)(<b class='flag-5'>1</b>)

    基于安路DR1M90 FPSoC的Linux系統(tǒng)全流程開(kāi)發(fā)指南(4)

    本手冊(cè)由創(chuàng)龍科技研發(fā),針對(duì)安路飛龍 DR1M90,詳述 Linux 系統(tǒng)開(kāi)發(fā)流程:LinuxSDK 配置編譯、BOOT.bin(FSBL+U-Boot)開(kāi)發(fā)、Kernel 與 Root
    的頭像 發(fā)表于 11-30 15:46 ?2140次閱讀
    基于安路DR<b class='flag-5'>1</b>M90 FPSoC的<b class='flag-5'>Linux</b>系統(tǒng)全流程<b class='flag-5'>開(kāi)發(fā)</b>指南(4)

    基于安路DR1M90 FPSoC 的Linux 系統(tǒng)全流程開(kāi)發(fā)指南(3)

    本手冊(cè)由創(chuàng)龍科技研發(fā),針對(duì)安路飛龍 DR1M90,詳述 Linux 系統(tǒng)開(kāi)發(fā)流程:LinuxSDK 配置編譯、BOOT.bin(FSBL+U-Boot)開(kāi)發(fā)、Kernel 與 Root
    的頭像 發(fā)表于 11-26 17:01 ?265次閱讀
    基于安路DR<b class='flag-5'>1</b>M90 FPSoC 的<b class='flag-5'>Linux</b> 系統(tǒng)全流程<b class='flag-5'>開(kāi)發(fā)</b>指南(3)

    基于安路DR1M90 FPSoC 的Linux 系統(tǒng)全流程開(kāi)發(fā)指南(1

    本手冊(cè)由創(chuàng)龍科技研發(fā),針對(duì)安路飛龍 DR1M90,詳述 Linux 系統(tǒng)開(kāi)發(fā)流程:LinuxSDK 配置編譯、BOOT.bin(FSBL+U-Boot)開(kāi)發(fā)、Kernel 與 Root
    的頭像 發(fā)表于 11-25 14:09 ?338次閱讀
    基于安路DR<b class='flag-5'>1</b>M90 FPSoC 的<b class='flag-5'>Linux</b> 系統(tǒng)全流程<b class='flag-5'>開(kāi)發(fā)</b>指南(<b class='flag-5'>1</b>)

    【免費(fèi)送書(shū)】成為硬核Linux開(kāi)發(fā)者:《Linux 設(shè)備驅(qū)動(dòng)開(kāi)發(fā)(第 2 版)》

    Linux系統(tǒng)的設(shè)備驅(qū)動(dòng)開(kāi)發(fā),一直給人門(mén)檻較高的印象,主要因內(nèi)核機(jī)制抽象、需深度理解硬件原理、開(kāi)發(fā)調(diào)試難度大所致。2021年,一本講解驅(qū)動(dòng)開(kāi)發(fā)的專著問(wèn)世即獲市場(chǎng)青睞,暢銷近萬(wàn)冊(cè)——這便
    的頭像 發(fā)表于 11-18 08:06 ?1230次閱讀
    【免費(fèi)送書(shū)】成為硬核<b class='flag-5'>Linux</b><b class='flag-5'>開(kāi)發(fā)</b>者:《<b class='flag-5'>Linux</b> 設(shè)備驅(qū)動(dòng)<b class='flag-5'>開(kāi)發(fā)</b>(第 2 版)》

    【書(shū)籍評(píng)測(cè)活動(dòng)NO.67】成為硬核Linux開(kāi)發(fā)者:《Linux 設(shè)備驅(qū)動(dòng)開(kāi)發(fā)(第 2 版)》

    時(shí)代的硬核技能。現(xiàn)在,我們從零起步,進(jìn)入Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)的世界吧。從零開(kāi)始學(xué)會(huì)Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)要快速上手Linux驅(qū)動(dòng)
    發(fā)表于 11-17 17:52

    RK3506開(kāi)發(fā)Linux開(kāi)發(fā)板極致性價(jià)比之選

    RK3506開(kāi)發(fā)Linux開(kāi)發(fā)板極致性價(jià)比之選瑞芯微RK3506開(kāi)發(fā)板,3核Cortex-A7@1.5GHz+Cortex-M0,Linux
    的頭像 發(fā)表于 09-11 16:26 ?3315次閱讀
    RK3506<b class='flag-5'>開(kāi)發(fā)</b>板<b class='flag-5'>Linux</b><b class='flag-5'>開(kāi)發(fā)</b>板極致性價(jià)比之選

    Linux 應(yīng)用開(kāi)發(fā)手冊(cè)

    T507linux應(yīng)用開(kāi)發(fā)手冊(cè)
    發(fā)表于 08-22 17:01 ?15次下載

    Linux系統(tǒng)中網(wǎng)絡(luò)配置詳解

    網(wǎng)絡(luò)配置是Linux系統(tǒng)運(yùn)維中的核心技能之一。正確理解和配置子網(wǎng)掩碼、網(wǎng)關(guān)等網(wǎng)絡(luò)參數(shù),直接影響系統(tǒng)的網(wǎng)絡(luò)連通性和性能。本文將深入探討Linux
    的頭像 發(fā)表于 07-17 11:01 ?1094次閱讀

    【HZ-T536開(kāi)發(fā)板免費(fèi)體驗(yàn)】2 - 交叉編譯倉(cāng)頡編程語(yǔ)言程序到開(kāi)發(fā)板運(yùn)行

    :提供微服務(wù)應(yīng)用開(kāi)發(fā)框架,具備 IOC 容器、AOP 切面編程、ORM 和事務(wù)管理等能力,幫助開(kāi)發(fā)者快速構(gòu)建微服務(wù)應(yīng)用。還可通過(guò)輕量級(jí)用戶態(tài)線程以及高性能網(wǎng)絡(luò)協(xié)議庫(kù),高效
    發(fā)表于 07-16 21:27

    Linux網(wǎng)絡(luò)設(shè)置與基礎(chǔ)服務(wù)

    Linux網(wǎng)絡(luò)設(shè)置與基礎(chǔ)服務(wù)
    的頭像 發(fā)表于 04-09 11:51 ?3283次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>網(wǎng)絡(luò)</b>設(shè)置與基礎(chǔ)服務(wù)

    Linux的作用

    工具和環(huán)境,支持多種編程語(yǔ)言和開(kāi)發(fā)框架。許多開(kāi)發(fā)人員使用Linux作為開(kāi)發(fā)平臺(tái),進(jìn)行軟件開(kāi)發(fā)、系
    發(fā)表于 04-04 01:57

    [迅為]Linux開(kāi)發(fā)小技巧:Remote - SSH插件

    [迅為]Linux開(kāi)發(fā)小技巧:Remote - SSH插件
    的頭像 發(fā)表于 04-01 15:46 ?1097次閱讀
    [迅為]<b class='flag-5'>Linux</b><b class='flag-5'>開(kāi)發(fā)</b>小技巧:Remote - SSH插件