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

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

3天内不再提示

Linux开发_网络编程、网络通信介绍

DS小龙哥-嵌入式技术 2022-09-17 15:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

【摘要】 介绍Linux网络编程: TCP网络编程、UDP网络编程案例,完成数据互相发送。

任务1: 网页视频监控

1.​学习网络编程

2.​USB摄像头

3.​HTTP协议: 搭建HTTP服务器。

​网络编程------TCP/IP协议编程----一套软件协议----->数据结构。

pYYBAGMlOyeAVTNnAACXA9IWko0152.png

​网络编程底层协议: (从网络收发一个字节)

1.​TCP协议(C/S): 点对点传输协议。数据传输可靠的。 适合传输大数据。

2.​UDP协议: 广播方式传输协议 (对特定端口号进行广播)。数据相对TCP不可靠的。---不适合传输大数据,传输小块数据。

​网络编程的上层协议:

1.​HTTP协议: 超文本传输协议----网络使用。

2.​FTP协议: 文件传输协议---传输单文件。

3.​NFS协议: 文件传输协议----网络文件系统。

​TCP协议编程:

1.​服务器: 等待客户端连接。

2.​客户端: 连接服务器。 QQ客户端、xxx游戏客户端。

poYBAGMlOyiAJKi8AAFwdCAi0iI791.pngpYYBAGMlOyiAPsWwAAEDiYXYfuo021.pngpoYBAGMlOyiAfnHpAAEK8xZpK1g676.png

网络协议: 大端模式。

计算机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
    TCP
    +关注

    关注

    8

    文章

    1433

    浏览量

    83781
  • UDP
    UDP
    +关注

    关注

    0

    文章

    335

    浏览量

    35529
  • 网络通信
    +关注

    关注

    4

    文章

    847

    浏览量

    32664
  • 网络编程
    +关注

    关注

    0

    文章

    74

    浏览量

    11193
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    配线架:未来网络通信的智能化趋势

    随着5G、物联网、云计算等技术的快速发展,未来网络通信正朝着更高速度、更大容量、更低延迟的方向迈进。在这一背景下,配线架作为网络通信的基础设施之一,也面临着智能化升级的挑战与机遇。本文将探讨配线架
    的头像 发表于 04-09 10:41 231次阅读

    配线架:网络通信的隐形枢纽

    在当今这个信息爆炸的时代,网络通信如同城市的血脉,连接着每一个角落,让数据与信息得以高效流通。而在这一复杂而精密的网络体系中,配线架作为不可或缺的组成部分,扮演着至关重要的角色。它虽不常被直接提及
    的头像 发表于 04-09 10:31 192次阅读

    极海APM32F427 MCU在RT-Thread系统上使用LwIP网络功能

    下面是基于RT-Thread的ENV命令行开发环境,在APM32F427上使用LwIP网络协议栈实现网络通信功能的。
    的头像 发表于 04-02 15:19 8667次阅读
    极海APM32F427 MCU在RT-Thread系统上使用LwIP<b class='flag-5'>网络</b>功能

    UTP CAT5e网线:现代网络通信的基石

    在当今数字化时代,网络通信已成为人们日常生活和工作中不可或缺的一部分。无论是家庭宽带接入、企业办公网络,还是数据中心的高速互联,都离不开稳定可靠的网络传输介质。UTP CAT5e网线,作为一种
    的头像 发表于 03-11 10:16 424次阅读

    攻克网络通信时钟挑战:高性能差分晶振解决方案

    ,正成为应对高端网络通信时钟挑战的关键解决方案。一、DXO差分输出振荡器优势差分晶振相较于传统单端(CMOS)晶振能够显著提升系统性能,主要体现在:抗干扰能力强:
    的头像 发表于 02-05 09:59 798次阅读
    攻克<b class='flag-5'>网络通信</b>时钟挑战:高性能差分晶振解决方案

    芯动科技与雄立科技合作高性能100G网络通信芯片一次流片成功

    近日,一站式IP和芯片定制赋能型领军企业——芯动科技宣布,与国内全栈网络通信芯片和解决方案提供商——雄立科技携手合作的高性能100G网络通信芯片,一次流片成功,实现规模化量产商用。
    的头像 发表于 02-05 09:46 950次阅读
    芯动科技与雄立科技合作高性能100G<b class='flag-5'>网络通信</b>芯片一次流片成功

    华为技术守护拉美网络通信生命线

    从安迪斯山脉到亚马逊流域,从阿塔卡马沙漠到加勒比群岛,拉丁美洲的自然风光壮丽多样。然而,这里也是世界上自然灾害最为频繁的地区之一,时常遭受飓风、地震、洪水等威胁和破坏。在这些突发灾害事件背后,除了奔赴前线紧急救援抢险的工程师,还有一支冷静、专业、全天候待命的队伍在背后默默支撑,守护着网络通信
    的头像 发表于 01-22 15:53 588次阅读

    COM20019I 3.3V:工业网络通信的理想选择

    COM20019I 3.3V:工业网络通信的理想选择 在工业自动化和嵌入式控制领域,可靠且高效的网络通信至关重要。SMSC的COM20019I 3.3V ARCNET控制器凭借其出色的性能和丰
    的头像 发表于 12-30 17:00 664次阅读

    全双工网状网络通信:为大型区域系统提供动力!

    全双工网状网络通信实现真正的同步双向语音、八路并发传输、长达7公里 LoRa 链路、动态路由与自组织 SON 架构,提供低延迟、高可靠性与强覆盖的专业无线通信解决方案。
    的头像 发表于 12-04 10:30 1753次阅读
    全双工网状<b class='flag-5'>网络通信</b>:为大型区域系统提供动力!

    5G网络通信有哪些技术痛点?

    ,这些技术使得5G网络能够满足未来物联网、智能制造、自动驾驶等领域对高速、低时延、高可靠性的通信需求。 5G网络通信有哪些技术痛点? 5G网络通信经过多年的高速发展,仍有一些技术痛点
    发表于 12-02 06:05

    网段隔离器实现静态NAT网络通信

    在许多网络场景中,不同网段之间需要进行通信,但又要保证各网段的相对独立性和安全性。如果缺少网络规划与网段隔离,会使网络面临巨大的安全风险,各类网络
    的头像 发表于 08-16 13:44 1112次阅读

    Linux系统中网络配置详解

    网络配置是Linux系统运维中的核心技能之一。正确理解和配置子网掩码、网关等网络参数,直接影响系统的网络连通性和性能。本文将深入探讨Linux
    的头像 发表于 07-17 11:01 1382次阅读

    【嘉楠堪智K230开发板试用体验】网络收发信息

    本次实验通过在 K230 上实现基于 Socket 的 TCP 客户端通信,成功与电脑服务器建立连接并实现数据收发。掌握了 Socket 编程的基本流程,加深了对 TCP/IP 协议和网络通信机制的理解,为后续
    发表于 07-13 08:13

    基于RK3576开发板的以太网口网络通信

    本文着重介绍如何通过配置文件配合命令行来修改网络参数,以及如何通过程序来修改配置文件。若用户仅想了解如何【通过桌面窗口】配置网络,或者想知道【为什么】debian系统采用NetworkManager这种方式配置
    的头像 发表于 05-06 11:43 1341次阅读
    基于RK3576<b class='flag-5'>开发</b>板的以太网口<b class='flag-5'>网络通信</b>

    Linux常用命令大全

    Linux常用命令是指在Linux操作系统中广泛使用的命令工具,这些命令工具可以完成各种不同的任务,如管理文件和目录、操作进程、网络通信、软件安装等。
    的头像 发表于 05-03 18:08 2045次阅读