嵌入式学习(网络通信UDP\TCP)

TCP:面向连接的协议。在数据传输前,必须先建立一条从源到目的地的可靠连接。双方通过"三次握手"过程协商连接参数,建立连接后才能进行数据传输。数据传输结束后,通过"四次挥手"断开连接。

UDP:无连接的协议。无需事先建立连接,发送方可以直接向接收方发送数据报文。每个数据报文独立传输,相互之间没有直接关联。

在网络通信中,不同端对应的任务和作用也不一样。

对于客户端:

1,创建一个用于通信的套接字(fd)

2,连接服务器:需要指定连接的服务器的IP 和 端口

3,建立连接成功,客户端和服务器建立连接通道

1>可以发送数据

2>可以接收数据

4,通信结束,断开连接

对于服务器:

1,创建一个用于监听的套接字

1>监听:监听有客户端的连接

2>套接字:这个套接字其实就是一个文件描述符

2,将这个监听文件描述符和本地的IP和端口绑定(IP和端口就是服务器的地址信息)

1>客户端连接服务器的时候使用的就是这个IP和端口

3,设置监听,监听的fd开始工作

4,阻塞等待,当有客户端发起连接,解除阻塞,接受客户端的连接,会得到一个和客户端通信的套接字 (fd)

5,服务端和客户端通信

1>接收数据

2>发送数据

6,通信结束,断开连接

bind()函数:

int bind ( int sockfd, const struct sockaddr *addr, socklen_t addrlen );

功能:将fd 和本地的IP + 端口进行绑定

参数:

  • sockfd : 通过socket函数得到的文件描述符

  • addr : 需要绑定的socket地址,这个地址封装了ip和端口号的信息

  • addrlen : 第二个参数结构体占的内存大小
    listen()函数:

int listen ( int sockfd , int backlog ) ;

  • 功能:监听这个socket上的连接

  • 参数:

  • sockfd : 通过socket()函数得到的文件描述符

  • backlog : 未连接的和已经连接的和的最大值, 5
    connect()函数:

int connect ( int sockfd , const struct sockaddr *addr , socklen_t addrlen );

  • 功能: 客户端连接服务器

  • 参数:

  • sockfd : 用于通信的文件描述符

  • addr : 客户端要连接的服务器的地址信息

  • addrlen : 第二个参数的内存大小

  • 返回值:成功 0, 失败 -1

accept()函数:

int accept ( int sockfd , struct sockaddr *addr , socklen_t *addrlen );

  • 功能:接收客户端连接,默认是一个阻塞的函数,阻塞等待客户端连接

  • 参数:

  • sockfd : 用于监听的文件描述符

  • addr : 传出参数,记录了连接成功后客户端的地址信息(ip,port)

  • addrlen : 指定第二个参数的对应的内存大小

  • 返回值:

  • 成功 :用于通信的文件描述符

  • 失败 :-1

此时可以用raed 和 write 函数对socket 进行读写操作。

相关推荐
Alan-Xia24 分钟前
使用jest测试用例之入门篇
前端·javascript·学习·测试用例
苏格拉真没有底24 分钟前
python实现mqtt消息转Tcp消息
网络·python·tcp/ip
三天不学习31 分钟前
uniapp x 学习之 uts 语言快速入门
学习·uni-app
蓑衣客VS索尼克2 小时前
无感方波开环强拖总结
经验分享·单片机·学习
肥肠可耐的西西公主2 小时前
前端(AJAX)学习笔记(CLASS 4):进阶
前端·笔记·学习
云上艺旅3 小时前
K8S学习之基础十五:k8s中Deployment扩容缩容
学习·docker·云原生·kubernetes·k8s
亭墨3 小时前
linux0.11内核源码修仙传第五章——内存初始化(主存与缓存)
linux·c语言·驱动开发·学习·缓存·系统架构
凡人的AI工具箱4 小时前
PyTorch深度学习框架60天进阶学习计划第14天:循环神经网络进阶
人工智能·pytorch·python·深度学习·学习·ai编程
傍晚冰川4 小时前
【江协科技STM32】ADC数模转换器-学习笔记
笔记·科技·stm32·单片机·嵌入式硬件·学习
知识分享小能手4 小时前
Html5学习教程,从入门到精通, HTML5 新的 Input 类型:语法知识点与案例代码(16)
开发语言·前端·学习·html·html5·web·java开发