【摘要】 介绍Linux网络编程: TCP网络编程、UDP网络编程案例,完成数据互相发送。
任务1: 网页视频监控
1.学习网络编程
2.USB摄像头
3.HTTP协议: 搭建HTTP服务器。
网络编程------TCP/IP协议编程----一套软件协议----->数据结构。

网络编程底层协议: (从网络收发一个字节)
1.TCP协议(C/S): 点对点传输协议。数据传输可靠的。 适合传输大数据。
2.UDP协议: 广播方式传输协议 (对特定端口号进行广播)。数据相对TCP不可靠的。---不适合传输大数据,传输小块数据。
网络编程的上层协议:
1.HTTP协议: 超文本传输协议----网络使用。
2.FTP协议: 文件传输协议---传输单文件。
3.NFS协议: 文件传输协议----网络文件系统。
TCP协议编程:
1.服务器: 等待客户端连接。
2.客户端: 连接服务器。 QQ客户端、xxx游戏客户端。



网络协议: 大端模式。
计算机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
+关注
关注
8文章
1433浏览量
83781 -
UDP
+关注
关注
0文章
335浏览量
35529 -
网络通信
+关注
关注
4文章
847浏览量
32664 -
网络编程
+关注
关注
0文章
74浏览量
11193
发布评论请先 登录
相关推荐
热点推荐
配线架:未来网络通信的智能化趋势
随着5G、物联网、云计算等技术的快速发展,未来网络通信正朝着更高速度、更大容量、更低延迟的方向迈进。在这一背景下,配线架作为网络通信的基础设施之一,也面临着智能化升级的挑战与机遇。本文将探讨配线架
配线架:网络通信的隐形枢纽
在当今这个信息爆炸的时代,网络通信如同城市的血脉,连接着每一个角落,让数据与信息得以高效流通。而在这一复杂而精密的网络体系中,配线架作为不可或缺的组成部分,扮演着至关重要的角色。它虽不常被直接提及
UTP CAT5e网线:现代网络通信的基石
在当今数字化时代,网络通信已成为人们日常生活和工作中不可或缺的一部分。无论是家庭宽带接入、企业办公网络,还是数据中心的高速互联,都离不开稳定可靠的网络传输介质。UTP CAT5e网线,作为一种
攻克网络通信时钟挑战:高性能差分晶振解决方案
,正成为应对高端网络通信时钟挑战的关键解决方案。一、DXO差分输出振荡器优势差分晶振相较于传统单端(CMOS)晶振能够显著提升系统性能,主要体现在:抗干扰能力强:
芯动科技与雄立科技合作高性能100G网络通信芯片一次流片成功
近日,一站式IP和芯片定制赋能型领军企业——芯动科技宣布,与国内全栈网络通信芯片和解决方案提供商——雄立科技携手合作的高性能100G网络通信芯片,一次流片成功,实现规模化量产商用。
华为技术守护拉美网络通信生命线
从安迪斯山脉到亚马逊流域,从阿塔卡马沙漠到加勒比群岛,拉丁美洲的自然风光壮丽多样。然而,这里也是世界上自然灾害最为频繁的地区之一,时常遭受飓风、地震、洪水等威胁和破坏。在这些突发灾害事件背后,除了奔赴前线紧急救援抢险的工程师,还有一支冷静、专业、全天候待命的队伍在背后默默支撑,守护着网络通信。
COM20019I 3.3V:工业网络通信的理想选择
COM20019I 3.3V:工业网络通信的理想选择 在工业自动化和嵌入式控制领域,可靠且高效的网络通信至关重要。SMSC的COM20019I 3.3V ARCNET控制器凭借其出色的性能和丰
全双工网状网络通信:为大型区域系统提供动力!
全双工网状网络通信实现真正的同步双向语音、八路并发传输、长达7公里 LoRa 链路、动态路由与自组织 SON 架构,提供低延迟、高可靠性与强覆盖的专业无线通信解决方案。
5G网络通信有哪些技术痛点?
,这些技术使得5G网络能够满足未来物联网、智能制造、自动驾驶等领域对高速、低时延、高可靠性的通信需求。
5G网络通信有哪些技术痛点?
5G网络通信经过多年的高速发展,仍有一些技术痛点
发表于 12-02 06:05
网段隔离器实现静态NAT网络通信
在许多网络场景中,不同网段之间需要进行通信,但又要保证各网段的相对独立性和安全性。如果缺少网络规划与网段隔离,会使网络面临巨大的安全风险,各类网络
Linux系统中网络配置详解
网络配置是Linux系统运维中的核心技能之一。正确理解和配置子网掩码、网关等网络参数,直接影响系统的网络连通性和性能。本文将深入探讨Linux
【嘉楠堪智K230开发板试用体验】网络收发信息
本次实验通过在 K230 上实现基于
Socket 的 TCP 客户端通信,成功与电脑服务器建立连接并实现数据收发。掌握了 Socket 编程的基本流程,加深了对 TCP/IP 协议和网络通信机制的理解,为后续
发表于 07-13 08:13
基于RK3576开发板的以太网口网络通信
本文着重介绍如何通过配置文件配合命令行来修改网络参数,以及如何通过程序来修改配置文件。若用户仅想了解如何【通过桌面窗口】配置网络,或者想知道【为什么】debian系统采用NetworkManager这种方式配置
Linux常用命令大全
Linux常用命令是指在Linux操作系统中广泛使用的命令工具,这些命令工具可以完成各种不同的任务,如管理文件和目录、操作进程、网络通信、软件安装等。
Linux开发_网络编程、网络通信介绍
评论