0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux开发_网络编程基础(1)

DS小龙哥-嵌入式技术 2022-09-17 15:19 次阅读

【摘要】 补充进程通信的知识点,介绍网络编程基础,完成服务器、客户端创建,实现服务器与客户端之间的基本通信。

任务1:进程

(1)​进程的创建和管理

(2)​命名管道与无名管道基本运用

(3)​信号的接收和发送(闹钟的信号)

#include 
#include 

/*信号处理函数*/
void sighandler(int signal_num)
{
	alarm(1);
	printf("SIGNAL:%d\n",signal_num);
}

int main(int argc,char **argv)
{
	/*绑定信号到特定的函数*/
	signal(SIGALRM,sighandler);
	alarm(1); //设置闹钟
	while(1)
	{
		
	}
	return 0;
}

需求:通过C语言代码获取其他进程(c语言代码、Shell脚本)的返回值。

(1)​system(“ls -l >123.txt”); //重定向输出

(2)​popen标准管道;

#include

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

参数解析:

const char *command:就是需要执行的命令,就是可执行程序。例如: “ls -l” “./a.out”

const char *type: “w”写 “r”读

int pclose(FILE *stream);

无名管道:

fds[0] 表示读

fds[1] 表示写

int dup2(int oldfd, int newfd); //实现文件描述符的重定向

示例: dup2(fds[1],1); //将本程序的标准输出定义到管道的写端

标准输入:0

标准输出:1

标准错误:2

FIFO文件是否可以在创建? 不可在挂载的目录下创建。

任务2:网络编程

管道: 运用多个进程之间的通信。

socket网络编程:运用于多个设备之间通信。

Socket网络编程实际对TCP/IP协议进行编程。

TCP/IP协议:

底层协议:TCP\UDP

上层协议:HTTP、FTP、NFS……..

​学习网络编程需要了解的概念:

1.​能够传输网络数据的方式: 以太网有线网卡、无线网卡WIFI

2.​了解网络协议:如何区分数据是发给谁的。

3.​IP地址:同一个局域网内,每台电脑的IP地址不一样。

IP地址:区分每台电脑。

4.​端口号:同一个电脑内,区分不同的应用程序。

192.168.1.18:8585

5. TCP协议:点对点协议(打电话),数据丢包会自动重发,传输比较稳定。

TCP协议有3次握手的过程,建立通信的基础。

一般适用于:FTP文件传输、HTTP网页数据传输等等…….

TCP协议通信中区分服务器与客户端:

服务器必须先存在,客户端才可以连接。(网络游戏)

客户端与客户端之间可以通信?必须通过服务器—模式就是(C/S)

5.​UDP协议:广播方式协议(上课一样)。

特性就是:实时性

一般适用于:视频传输、视频监控…..QQ视频

UDP协议不区分服务器与客户端,发送数据的就是服务器,接收数据的就是客户端。

6.​数据的大小端模式。电脑上的数据一般都是小端模式,网络数据大端模式。

7.​Socket编程与文件操作原理是一样。一切皆文件!

​TCP服务器创建流程

1.​调用socket函数创建网络通信套接字(用法与open类似)。

2.​调用bind绑定端口的函数(填充必须要结构体成员),创建服务器。

3.​设置监听端口的数量(设置最大能够连接的客户端数量)

4.​调用accept等待

5.​调用read或者write函数进行基本通信

​TCP客户端创建流程

1.​调用socket函数创建网络通信套接字(用法与open类似)。

2.​调用Connect函数连接指定的服务器

3.​调用read或者write函数进行基本通信

​ 练习

1.​实现服务器与客户端之间的基本通信,收发数据

客户端:

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

/*
TCP服务器:
1. sockt创建套接字
2. bind绑定端口
3. 设置监听的数量
4. 等待客户端连接
*/
int socket_sfd; /*保存了服务器端的套接字*/
int socket_cfd; /*已经连接成功的客户端套接字*/

int main(int argc,char **argv)
{
	if(argc!=3)
	{
		printf("./server <192.168.xx.xx 本地IP地址> <服务器端口号>\n");
		exit(-1);
	}
	
	int err; //存放返回值状态
	/*1. 创建套接字*/
	socket_sfd=socket(AF_INET,SOCK_STREAM,0);
	if(socket_sfd<0)
	{
		printf("服务器端创建失败!\n");
		exit(-1);
	}
	
	/*2. 绑定端口*/
	struct sockaddr_in ServerAddr;
	ServerAddr.sin_family=AF_INET; //IPV4协议
	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. 设置监听的数量*/
	listen(socket_sfd,10);
	
	/*4. 等待客户端连接*/
	struct sockaddr_in ClientAddr; //存放已经连接成功客户端信息
	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. 收发数据 :服务器给客户端发送10个字节的数据*/
	err=write(socket_cfd,"123456789",10);
	printf("服务器成功发送:%d 字节\r\n",err);
	return 0;
}

2.​实现服务器与客户端之间的文件传输。(单个文件传输)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信
    +关注

    关注

    18

    文章

    5957

    浏览量

    135816
  • 网络编程
    +关注

    关注

    0

    文章

    71

    浏览量

    10057
收藏 人收藏

    评论

    相关推荐

    Linux应用编程的基本概念

    Linux应用编程涉及到在Linux环境下开发和运行应用程序的一系列概念。以下是一些涵盖Linux应用
    的头像 发表于 10-24 17:19 172次阅读

    Linux开发怎么学?

    Linux开发怎么学? 学习 Linux 是一个循序渐进、持续不断的过程。我们可以从以下几个方面开始 1.了解 Linux 的历史和发展:
    发表于 10-10 14:34

    Linux网络协议栈的实现

    网络协议栈是操作系统核心的一个重要组成部分,负责管理网络通信中的数据包处理。在 Linux 操作系统中,网络协议栈(Network Stack)负责实现 TCP/IP 协议簇,处理应用
    的头像 发表于 09-10 09:51 247次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>网络</b>协议栈的实现

    嵌入式linux开发的基本步骤有哪些?

    嵌入式Linux开发是一个复杂的过程,涉及到硬件选择、操作系统移植、驱动开发、应用程序开发等多个方面。以下是嵌入式Linux
    的头像 发表于 09-02 09:11 364次阅读

    linux开发板与树莓派的区别

    操作系统的微型计算机,主要用于教育、编程、媒体播放等领域。 硬件配置 Linux开发板:Linux开发板的硬件配置因厂商和型号而异,通常包括
    的头像 发表于 08-30 15:34 696次阅读

    linux开发板和单片机开发的区别

    、PIC等,处理能力和内存容量相对较低。 操作系统 Linux开发板通常使用Linux操作系统,具有丰富的软件资源和开发工具。单片机开发则通
    的头像 发表于 08-30 15:30 595次阅读

    Linux 驱动开发与应用开发,你知道多少?

    一、Linux驱动开发与应用开发的区别开发层次不同:Linux驱动开发主要是针对硬件设备进行
    的头像 发表于 08-30 12:16 546次阅读
    <b class='flag-5'>Linux</b> 驱动<b class='flag-5'>开发</b>与应用<b class='flag-5'>开发</b>,你知道多少?

    Linux网络编程

    :面向报文,不可靠,(类似于双方发短信),适用于数据量大且不需要准确传输 进程间通信是基于Linux内核的,不适用于两台手机之间的通信。   字节序: 小端:将低序字节存储在起始地址 大端:将高序字节存储在起始地址 电脑是小端字节序,网络字节序是大端字节序。
    的头像 发表于 03-26 10:58 292次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>网络</b><b class='flag-5'>编程</b>

    fpga开发板与linux开发板区别

    (Field-Programmable Gate Array)是一种可编程逻辑器件,它可以通过编程改变硬件逻辑电路的功能和结构。FPGA采用了可编程的门极,可以根据需要重新配置内部电路,从而实现不同的功能和逻辑关系。而
    的头像 发表于 02-01 17:09 2046次阅读

    TLT507-Linux-RT应用开发案例

    TLT507-Linux-RT应用开发案例
    的头像 发表于 01-26 09:46 651次阅读
    TLT507-<b class='flag-5'>Linux</b>-RT应用<b class='flag-5'>开发</b>案例

    TLT507-Linux应用开发手册

    TLT507-Linux应用开发手册
    的头像 发表于 01-26 09:34 648次阅读
    TLT507-<b class='flag-5'>Linux</b>应用<b class='flag-5'>开发</b>手册

    TL3588-Linux应用开发手册

    TL3588-Linux应用开发手册
    的头像 发表于 01-24 10:58 412次阅读
    TL3588-<b class='flag-5'>Linux</b>应用<b class='flag-5'>开发</b>手册

    如何解决Linux系统中的网络连接问题?

    如何解决Linux系统中的网络连接问题? Linux系统中的网络连接问题是常见的技术难题之一,通常涉及在Linux上配置
    的头像 发表于 01-12 15:17 867次阅读

    DIY个人的Linux开发板教程

    作者简介:大佬已在硬创社开源了近50款开发板,动手能力极强,于去年年底开始接触学习Linux,并由全志V3s、F1C200S等芯片开始上手DIY个人的Linux
    的头像 发表于 01-07 09:52 1924次阅读
    DIY个人的<b class='flag-5'>Linux</b><b class='flag-5'>开发</b>板教程

    Linux网络基本配置与管理

    Linux是一种开源操作系统,被广泛用于服务器和网络设备中。在Linux中,网络配置和管理是一个重要且复杂的任务。本篇文章将详细介绍Linux
    的头像 发表于 11-27 16:51 864次阅读