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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

Linux開發(fā)_網(wǎng)絡編程基礎(1)

DS小龍哥-嵌入式技術 ? 2022-09-17 15:19 ? 次閱讀

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

任務1:進程

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

(2)?命名管道與無名管道基本運用

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

#include 
#include 

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

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

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

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

(2)?popen標準管道;

#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”寫 “r”讀

int pclose(FILE *stream);

無名管道:

fds[0] 表示讀

fds[1] 表示寫

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

示例: dup2(fds[1],1); //將本程序的標準輸出定義到管道的寫端

標準輸入:0

標準輸出:1

標準錯誤:2

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

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

管道: 運用多個進程之間的通信。

socket網(wǎng)絡編程:運用于多個設備之間通信。

Socket網(wǎng)絡編程實際對TCP/IP協(xié)議進行編程。

TCP/IP協(xié)議:

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

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

??學習網(wǎng)絡編程需要了解的概念:

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

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

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

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

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

192.168.1.18:8585

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

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

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

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

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

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

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

特性就是:實時性

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

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

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

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

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

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

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

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

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

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

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

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

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

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

?? 練習

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

客戶端:

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

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

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 通信
    +關注

    關注

    18

    文章

    5926

    瀏覽量

    135695
  • 網(wǎng)絡編程

    關注

    0

    文章

    66

    瀏覽量

    10048
收藏 人收藏

    評論

    相關推薦

    Linux開發(fā)怎么學?

    Linux開發(fā)怎么學? 學習 Linux 是一個循序漸進、持續(xù)不斷的過程。我們可以從以下幾個方面開始 1.了解 Linux 的歷史和發(fā)展:
    發(fā)表于 10-10 14:34

    linux開發(fā)板與樹莓派的區(qū)別

    操作系統(tǒng)的微型計算機,主要用于教育、編程、媒體播放等領域。 硬件配置 Linux開發(fā)板:Linux開發(fā)板的硬件配置因廠商和型號而異,通常包括
    的頭像 發(fā)表于 08-30 15:34 ?466次閱讀

    linux開發(fā)板和單片機開發(fā)的區(qū)別

    、PIC等,處理能力和內(nèi)存容量相對較低。 操作系統(tǒng) Linux開發(fā)板通常使用Linux操作系統(tǒng),具有豐富的軟件資源和開發(fā)工具。單片機開發(fā)則通
    的頭像 發(fā)表于 08-30 15:30 ?434次閱讀

    Linux 驅動開發(fā)與應用開發(fā),你知道多少?

    一、Linux驅動開發(fā)與應用開發(fā)的區(qū)別開發(fā)層次不同:Linux驅動開發(fā)主要是針對硬件設備進行
    的頭像 發(fā)表于 08-30 12:16 ?357次閱讀
    <b class='flag-5'>Linux</b> 驅動<b class='flag-5'>開發(fā)</b>與應用<b class='flag-5'>開發(fā)</b>,你知道多少?

    Linux網(wǎng)絡編程

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

    fpga開發(fā)板與linux開發(fā)板區(qū)別

    (Field-Programmable Gate Array)是一種可編程邏輯器件,它可以通過編程改變硬件邏輯電路的功能和結構。FPGA采用了可編程的門極,可以根據(jù)需要重新配置內(nèi)部電路,從而實現(xiàn)不同的功能和邏輯關系。而
    的頭像 發(fā)表于 02-01 17:09 ?1900次閱讀

    如何解決Linux系統(tǒng)中的網(wǎng)絡連接問題?

    如何解決Linux系統(tǒng)中的網(wǎng)絡連接問題? Linux系統(tǒng)中的網(wǎng)絡連接問題是常見的技術難題之一,通常涉及在Linux上配置
    的頭像 發(fā)表于 01-12 15:17 ?742次閱讀

    DIY個人的Linux開發(fā)板教程

    作者簡介:大佬已在硬創(chuàng)社開源了近50款開發(fā)板,動手能力極強,于去年年底開始接觸學習Linux,并由全志V3s、F1C200S等芯片開始上手DIY個人的Linux
    的頭像 發(fā)表于 01-07 09:52 ?1727次閱讀
    DIY個人的<b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)</b>板教程

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

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

    vm虛擬機linux系統(tǒng)怎么編程

    不同的操作系統(tǒng)之間切換,并在Linux系統(tǒng)中進行編程開發(fā)。 以下是使用虛擬機在Linux系統(tǒng)中進行編程的詳細步驟:
    的頭像 發(fā)表于 11-17 10:10 ?1659次閱讀

    嵌入式Linux應用程序開發(fā)詳解-第1

    電子發(fā)燒友網(wǎng)站提供《嵌入式Linux應用程序開發(fā)詳解-第1章.pdf》資料免費下載
    發(fā)表于 11-16 11:17 ?0次下載
    嵌入式<b class='flag-5'>Linux</b>應用程序<b class='flag-5'>開發(fā)</b>詳解-第<b class='flag-5'>1</b>章

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

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

    linux異步io框架iouring應用

    Linux內(nèi)核5.1支持了新的異步IO框架iouring,由Block IO大神也即Fio作者Jens Axboe開發(fā),意在提供一套公用的網(wǎng)絡和磁盤異步IO,不過io_uring目前在磁盤方面要比
    的頭像 發(fā)表于 11-08 15:39 ?577次閱讀
    <b class='flag-5'>linux</b>異步io框架iouring應用

    linux命令行與shell編程實戰(zhàn)

    Linux命令行與Shell編程實戰(zhàn)主要涉及以下內(nèi)容: Linux命令行基礎:學習Linux命令行的基本操作,如文件管理、進程管理、網(wǎng)絡配置
    的頭像 發(fā)表于 11-08 10:57 ?676次閱讀

    linux命令和shell編程有什么聯(lián)系

    的命令,并提供了許多功能和特性,如變量、控制結構、函數(shù)等,這些功能和特性使得Shell編程成為可能。 其次,Linux命令是Shell編程的重要組成部分。通過使用Linux命令,用戶可
    的頭像 發(fā)表于 11-08 10:53 ?837次閱讀