套接字socket

参考:https://blog.csdn.net/weixin_43888876/article/details/85016070

 

基于TCP(面向连接)的socket编程的服务器端程序流程如下:

1 创建套接字(socket())。

2 将套接字绑定到一个本地地址和端口上(bind())。

3 将套接字设为监听模式,准备接收客户请求(listen())

4 等待客户请求到来;当清求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept())。

5 用返回的套接字和客户端进行通信(send/recv())返回,等待另一客户请求。

6 关闭套接字。

基于TCP(面向连接)的socket编程的客户端程序流程如下:

1 创建套接字(socket())。

2 向服务器发出连接请求(connect())。

3 和服务器端进行通信(send/recv())。

4 关闭套接字。

 

 

 解释====================:

数据完整性要求较高的场合,就应采用TCP协议。

IP网络层提供IP寻址和路由。因为在网络上数据可以经由多条线路到达目的地,网络层负责找出最佳的传输线路。

IP地址与数据包:

 

 

 

 

IP层就是把数据分组从一个主机跨越千山万水搬运到另外一主机, 并且这搬运服务一点都不可靠, 丢包、重复、失序可以说是家常便饭。如果失败是否需要重传?如果需要,那就使用TCP协议实现可靠的、面向连接的传输连接,如果不需要,那就使用UDP协议使用不可靠的、不面向连接的传输连接。

所以不同的网络应用程序可以用TCP实现,也可以用UDP实现,只是可靠性和实时性不一样。

在TCP或UDP协议上编程是比较复杂的。例如TCP协议, 我们不能要求每个程序员都去实现建立连接的3次握手(确认客户端、服务端的发信、收信能力),分组交换、失败重传(中间节点的路由可以是随机的,允许失序、重复、丢失,可靠的传输完全由两端点来实现,失败后重传即可,而顺序可以由数据包的序号来确定), 这些应该是属于操作系统内核的部分, 没必要重复开发, 但是对于应用程序来讲, 操作系统可以抽象出一个socket概念, 让上层应用去编程。

所以,Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

 

Socket是连接应用程序与网络驱动程序的桥梁Socket在应用程序中创建,通过bind与驱动程序建立关系。此后,应用程序送给Socket的数据,由Socket交给驱动程序向网络上发送出去。计算机从网络上收到与该Socket绑定的IP+Port相关的数据后,由驱动程序交给Socket,应用程序便可从该Socket中提取接收到的数据。网络应用程序就是这样通过socket进行数据的发送与接收的。

 

 

posted @   小毛编  阅读(99)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示