【摘要】 介绍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文章
1353浏览量
79046 -
UDP
+关注
关注
0文章
325浏览量
33929 -
网络通信
+关注
关注
4文章
793浏览量
29786 -
网络编程
+关注
关注
0文章
71浏览量
10074
发布评论请先 登录
相关推荐
百问FB网络编程 - 网络编程简介
脉冲编码调制在网络通信中的应用
socket 网络通信协议解析
Linux网络协议栈的实现

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

探索光耦威廉希尔官方网站 在5G网络通信的创新应用

一个没有mesh协议的ble设备,如何通过gatt协议与mesh网络通信?
SDWAN威廉希尔官方网站 是否会增加网络安全风险?SD-WAN如何确保网络通信的安全性?
Linux网络编程

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

评论