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

    文章

    1268

    浏览量

    78270
  • UDP
    UDP
    +关注

    关注

    0

    文章

    311

    浏览量

    33615
  • 网络通信
    +关注

    关注

    4

    文章

    728

    浏览量

    29548
  • 网络编程
    +关注

    关注

    0

    文章

    64

    浏览量

    9981
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    网络通信技术分为哪三个层次

    网络通信技术分为物理层、数据链路层和网络层三个层次。每个层次都有不同的功能和任务,它们协同工作,确保数据在网络中的传输和接收。以下是关于网络通信技术各个层次的详细解释,以及如何协同工作
    的头像 发表于 12-20 09:13 699次阅读

    传感器网络通信基础知识

    电子发烧友网站提供《传感器网络通信基础知识.pdf》资料免费下载
    发表于 11-15 11:50 0次下载
    传感器<b class='flag-5'>网络通信</b>基础知识

    Socket 网络编程框架介绍

    Socket 网络编程框架 Socket(套接字)是一个网络编程概念,描述了一个通信端点(Endpoint),用于建立
    的头像 发表于 11-09 14:19 332次阅读
    Socket <b class='flag-5'>网络</b><b class='flag-5'>编程</b>框架<b class='flag-5'>介绍</b>

    单片机与Internct网络通信的一种具体实现方案

    电子发烧友网站提供《单片机与Internct网络通信的一种具体实现方案.pdf》资料免费下载
    发表于 10-25 10:40 3次下载
    单片机与Internct<b class='flag-5'>网络通信</b>的一种具体实现方案

    请问单片机和投影仪之间可以通过网络通信方式通信吗?

    单片机和投影仪之间可以通过网络通信方式通信吗?
    发表于 10-19 06:42

    TCP/UDP网络编程的基础知识合集3

    本文主要记录TCP/UDP网络编程的基础知识,采用TCP/UDP实现宿主机和目标机之间的网络通信
    的头像 发表于 05-18 17:31 571次阅读
    TCP/UDP<b class='flag-5'>网络</b><b class='flag-5'>编程</b>的基础知识合集3

    TCP/UDP网络编程的基础知识合集2

    本文主要记录TCP/UDP网络编程的基础知识,采用TCP/UDP实现宿主机和目标机之间的网络通信
    的头像 发表于 05-18 17:31 445次阅读

    TCP/UDP网络编程的基础知识合集1

    本文主要记录TCP/UDP网络编程的基础知识,采用TCP/UDP实现宿主机和目标机之间的网络通信
    的头像 发表于 05-18 17:31 520次阅读

    网络通信主站与标准DP从站通信组态介绍

    只需要对网络通信进行简单的组态,而不需要进行编写任何程序,就可以实现DP网络通信,用户程序与远程从站I/O就好像访问主机架I/O一样,对于编程来说对从站I/O编程与集中式系统
    发表于 05-18 09:24 1403次阅读
    <b class='flag-5'>网络通信</b>主站与标准DP从站<b class='flag-5'>通信</b>组态<b class='flag-5'>介绍</b>

    网络通信技术的特征

    高速传输:网络通信技术具有高速传输的特点,可以实现较快的数据传输速度。随着技术的发展,网络通信技术的传输速度不断提高,可以实现更快速的数据传输。
    发表于 05-08 15:17 891次阅读

    网络通信的特点

    网络通信可以分为两大类:客户端准客户端(C/S)和Peer-To-Peer(P2P)网络通信。其中,客户端/服务器式网络通信是指传统的客户端/服务器网络模型,客户端通常指浏览器或其他用
    发表于 05-08 15:12 1548次阅读

    网络通信的原理

    网络通信中,数据通过传输媒介(有线或无线)进行传输。传输媒介可以是传统的网线、光纤、无线电波等。数据的传输方式可以是串行方式和并行方式,其中串行方式是一位一位按顺序传输数据,而并行方式是同时传输多位数据。
    发表于 05-08 15:06 3290次阅读

    网络通信基础常识

    网络通信中最重要的就是网络通信协议。当今网络协议有很多,局域网中最常用的有三个网络协议:MICROSOFT的NETBEUI、NOVELL的IPX/SPX和TCP/IP协议。应根据需要来
    发表于 05-08 15:02 1538次阅读