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

    文章

    1353

    浏览量

    79068
  • UDP
    UDP
    +关注

    关注

    0

    文章

    325

    浏览量

    33934
  • 网络通信
    +关注

    关注

    4

    文章

    799

    浏览量

    29810
  • 网络编程
    +关注

    关注

    0

    文章

    71

    浏览量

    10075
收藏 人收藏

    评论

    相关推荐

    全志T113-S3开发网络通信

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

    百问FB网络编程 - 网络编程简介

    6.1 网络编程简介 ​要编写通过计算机网络通信的程序,首先要确定这些程序同通信的协议(protocol),在设计一个协议的细节之前,首先要分清程序是由哪个程序发起以及响应何时产生。
    发表于 12-04 09:46

    脉冲编码调制在网络通信中的应用

    脉冲编码调制(Pulse Code Modulation,PCM)在网络通信中的应用十分广泛,其作为一种数字信号处理技术,能够将模拟信号转换成数字信号,以便在数字通信系统中传输和处理。以下是PCM
    的头像 发表于 11-26 09:57 490次阅读

    socket 网络通信协议解析

    在现代计算机科学中,网络通信是信息交换的核心。Socket(套接字)是网络通信中一个至关重要的概念,它提供了一种抽象层,使得程序能够发送和接收数据。 1. Socket的基本概念 Socket是一种
    的头像 发表于 11-12 14:04 612次阅读

    Linux网络基础知识总结

    同 CPU、内存以及 I/O 一样,网络也是 Linux 系统最核心的功能。 网络是一种把不同计算机或网络设备连接到一起的技术,它本质上是一种进程间
    的头像 发表于 10-28 10:42 250次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>网络</b>基础知识总结

    Linux网络协议栈的实现

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

    YXC可编程晶振,频点156.25MHZ,3225封装,适用与AI网络通信设备

    随着技术的发展,数据传输速率越来越高,晶振的频率可以根据需要进行调整,以适应不同的数据传输速率,YSO690PR系列的特点是可编程,1-200MHz频率任意编程,并精确输出到小数点后6位,优化系统性能,晶振的稳定性有助于优化AI网络通信
    的头像 发表于 08-08 15:41 391次阅读
    YXC可<b class='flag-5'>编程</b>晶振,频点156.25MHZ,3225封装,适用与AI<b class='flag-5'>网络通信</b>设备

    探索光耦技术在5G网络通信的创新应用

    5G网络通信经过多年的高速发展,仍有一些技术痛点未能解决,其技术痛点主要包括网络覆盖范围与信号质量、高频段通信与设备兼容性、关键技术不够成熟以及核心器件依赖进口等方面。光耦技术在解决这些5G
    的头像 发表于 06-26 09:31 563次阅读
    探索光耦技术在5G<b class='flag-5'>网络通信</b>的创新应用

    一个没有mesh协议的ble设备,如何通过gatt协议与mesh网络通信

    一个没有mesh协议的ble设备,如何通过gatt协议与mesh网络通信,代理节点需要调用需要调用那些接口进行转换。mesh网络中的代理节点如何转换gatt服务的消息的。ESP-IDF是否有提供相应的demo。
    发表于 06-24 07:52

    SDWAN技术是否会增加网络安全风险?SD-WAN如何确保网络通信的安全性?

    SDWAN技术是否会增加网络安全风险?SD-WAN如何确保网络通信的安全性? SDWAN技术的广泛应用为企业网络带来了更大的灵活性和可扩展性,但同时也带来了一些安全风险。在谈论SDWAN如何确保
    的头像 发表于 03-27 16:57 897次阅读

    Linux网络编程

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

    鸿蒙开发实战:【网络管理-Socket连接】

    Socket在网络通信方面的应用,展示了Socket在两端设备的连接验证、聊天通信方面的应用。
    的头像 发表于 03-19 22:04 890次阅读
    鸿蒙<b class='flag-5'>开发</b>实战:【<b class='flag-5'>网络</b>管理-Socket连接】

    时钟同步系统在网络通信中的重要性及优势

    时钟同步是指多个设备或系统之间的时间保持一致。在网络通信中,时钟同步系统至关重要,它可以确保网络通信的准确性和可靠性。 时钟同步系统在网络通信中的重要性 保证数据传输的准确性 在网络通信
    的头像 发表于 03-19 10:35 1258次阅读
    时钟同步系统在<b class='flag-5'>网络通信</b>中的重要性及优势

    5G网络通信有哪些技术痛点?光耦技术在5G网络通信的应用

    5G网络通信有哪些技术痛点?光耦技术在5G网络通信的应用  5G网络通信的技术痛点: 1. 频谱资源短缺:5G通信需要更高的频谱资源来支持更大的数据传输量和更高的速度,但是目前无线
    的头像 发表于 02-18 17:13 973次阅读

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

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