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

    文章

    1418

    浏览量

    83020
  • UDP
    UDP
    +关注

    关注

    0

    文章

    331

    浏览量

    35216
  • 网络通信
    +关注

    关注

    4

    文章

    830

    浏览量

    32398
  • 网络编程
    +关注

    关注

    0

    文章

    72

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

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

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

    Linux系统中网络配置详解

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

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

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

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

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

    爱普生SG3225EEN低抖动差分晶振在网络通信的应用

    在当今数字化时代,网络通信的飞速发展对数据传输的准确性、稳定性和高效性提出了极为严苛的要求。从5G通信网络的大规模部署,到数据中心的海量数据交换,再到智能家居系统的互联互通,每一个环节都离不开精准
    的头像 发表于 04-15 11:28 643次阅读
    爱普生SG3225EEN低抖动差分晶振在<b class='flag-5'>网络通信</b>的应用

    智多晶LWIP网络通信系统介绍

    在物联网蓬勃兴起的当下,嵌入式设备的网络通信能力如同为其插上了腾飞的翅膀,使其能够自由穿梭于信息的浩瀚海洋。而 LWIP,宛如一位身姿矫健的轻骑兵,在资源有限的嵌入式系统中飞驰,轻松完成各种复杂的网络通信任务。西安智多晶微电子有限公司的LWIP
    的头像 发表于 04-10 16:27 1670次阅读
    智多晶LWIP<b class='flag-5'>网络通信</b>系统<b class='flag-5'>介绍</b>

    Linux网络设置与基础服务

    Linux网络设置与基础服务
    的头像 发表于 04-09 11:51 3139次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>网络</b>设置与基础服务

    雷卯收集网络通信开发

    。 雷卯收集网络通信开发板明细如下:       以下是网络通信开发介绍网络通信是通过互联
    的头像 发表于 04-07 20:09 454次阅读
    雷卯收集<b class='flag-5'>网络通信</b><b class='flag-5'>开发</b>板

    800G光模块:引领未来数据中心与网络通信的新引擎

    5G、云计算等技术发展推动全球数据流量增长,800G光模块作为高速光通信核心组件,具有卓越传输速率、低功耗、高端口密度优势,应用于数据中心、5G网络、AI及高性能计算,重塑网络通信格局。
    的头像 发表于 02-07 11:13 1377次阅读

    TCP协议在网络通信中的应用

    在当今数字化时代,网络通信已经成为我们日常生活和工作中不可或缺的一部分。TCP协议作为网络通信的基石,确保了数据能够在不同设备之间可靠地传输。 一、TCP协议的工作原理 TCP是一种面向连接的、可靠
    的头像 发表于 01-22 09:50 1136次阅读

    桥接解决网络覆盖问题

    随着信息技术的飞速发展,网络覆盖问题成为了制约网络通信质量的关键因素之一。桥接技术作为一种有效的网络连接手段,能够在不同网络之间建立通信桥梁
    的头像 发表于 01-10 11:07 1092次阅读

    全志T113-S3开发网络通信

    前言:在使用开发板的过程中经常会使用到ssh、ftp等网络服务,这时需要使用开发板的网络功能。因此新拿到的开发板要先进行
    的头像 发表于 12-26 08:32 2004次阅读
    全志T113-S3<b class='flag-5'>开发</b>板<b class='flag-5'>网络通信</b>

    快速测试RK3588网络通信能力

    前言:本期我们将进一步探讨网络功能的调试方法,涵盖网络测试、4G/5G测试和WiFi测试。这些测试将帮助您全面评估开发板的网络连接性能,确保各项无线
    的头像 发表于 12-19 08:33 3229次阅读
    快速测试RK3588<b class='flag-5'>网络通信</b>能力