首页 > 编程语言 >基于tcp协议的socket编程

基于tcp协议的socket编程

时间:2023-07-04 15:04:17浏览次数:39  
标签:Socket 编程 tcp TCP 接字 客户端 连接 socket

一、什么是Scoket

1、Socket介绍

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

所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

注意:也有人将socket说成ip+port,ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序,ip地址是配置到网卡上的,而port是应用程序开启的,ip与port的绑定就标识了互联网中独一无二的一个应用程序,而程序的pid是同一台机器上不同进程或者线程的标识。

2、基于文件类型的套接字家族

AF_UNIX

unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信

3、基于网络类型的套接字家族

AF_INET

(还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以

大部分时候我么只使用AF_INET)

4、套接字工作流程

先从服务器端说起,服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。

在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。

客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

5、服务端套接字函数

方法
 
用途
 
s.bind()
 
绑定(主机,端口号)到套接字
 
s.listen()
 
开始TCP监听
 
s.accept()
 
被动接受TCP客户的连接,(阻塞式)等待连接的到来
 
  6、客户端套接字函数
方法
 
用途
 
s.connect()
 
主动初始化TCP服务器连接
 
s.connect_ex()
 
connect()函数的扩展版本,出错时返回出错码,而不是抛出异常
 
  7、公共用途的套接字函数
方法
 
用途
 
s.recv()
 
接收TCP数据
 
s.send()
 
发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)
 
s.sendall()
 
发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)
 
s.recvfrom()
 
接收UDP数据
 
s.sendto()
 
发送UDP数据
 
s.getpeername()
 
连接到当前套接字的远端的地址
 
s.getsockname()
 
当前套接字的地址
 
s.getsockopt()
 
返回指定套接字的参数
 
s.setsockopt()
 
设置指定套接字的参数
 
s.close()
 
关闭套接字
 
  8、面向锁的套接字方法
方法
 
用途
 
s.setblocking()
 
设置套接字的阻塞与非阻塞模式
 
s.settimeout()
 
设置阻塞套接字操作的超时时间
 
s.gettimeout()
 
得到阻塞套接字操作的超时时间
 
  9、面向文件的套接字的函数
方法
 
用途
 
s.fileno()
 
套接字的文件描述符
 
s.makefile()
 
创建一个与该套接字相关的文件

二、

 

 

三、

 

 

四、

 

标签:Socket,编程,tcp,TCP,接字,客户端,连接,socket
From: https://www.cnblogs.com/dgp-zjz/p/17525747.html

相关文章

  • MQTTnet 创建基于 WebSocket 的 Mqtt 服务器
    MQTTnet.Exceptions.MqttProtocolViolationException:Expectedatleast21540bytesbutthereareonly71bytes使用了错误的协议,mqtt有tcp和ws两种连接协议ws://使用1883端口就能正常连接 ......
  • Java JUI编程
    前言初学,虽然不常用了,但对于理解MVC很有帮助,顺带学一下把。1.简介核心技术是SwingAwt(Awt是Swing前身)需要学:窗口,弹窗,面板,文本框,列表框,按钮,图片,监听事件,鼠标,键盘。2.AWT2.1窗口Framenew一个Frame可以实现,也可以通过继承封装。publicclassMyFrameextendsFrame......
  • CakePHP教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介CakePHP是一个运用了诸如ActiveRecord、AssociationDataMapping、FrontController和MVC等著名设计模式的快速开发框架。该项目主要目标是提供一个可以让各种层次的PHP开发人员快速地开发出健壮的Web应用,而又不失灵活性。CakePHP是一个基于PHP,免费且开源的迅速发展框......
  • WebSocket 协议详解
    一、WebSocket协议背景早期,在网站上推送消息给用户,只能通过轮询的方式或Comet技术。轮询就是浏览器每隔几秒钟向服务端发送HTTP请求,然后服务端返回消息给客户端。轮询技术一般在浏览器上就是使用setInerval或setTimeout这种方式的缺点:需要不断的向服务端发送HTTP......
  • 【笔试实战】LeetCode题单刷题-编程基础 0 到 1【二】
    1822. 数组元素积的符号题目链接1822. 数组元素积的符号题目描述已知函数 signFunc(x) 将会根据 x 的正负返回特定值:如果 x 是正数,返回 1 。如果 x 是负数,返回 -1 。如果 x 是等于 0 ,返回 0 。给你一个整数数组 nums 。令 product 为数组 nums......
  • 编程开发 --- vue是什么
    只面向视图层的html模板引擎只面向视图层指的是可以在浏览器独立运行且只关注视图。模板引擎指的是使得html具备完备编程语言的特性。比如if语句 Vue是一种用于构建用户界面的渐进式JavaScript框架。它是一个开源项目,由尤雨溪(EvanYou)开发,并得到了广泛的社区支持和贡献。Vue......
  • 异步编程
    1.greenlet实现协程过程详细: 2.yield关键字实现协程for循环流程: 3.asyncio模块实现协程操作: 4.async&await关键字实现协程: ......
  • OSI七层模型和TCP/IP协议
    目录一、分层思想二、OSI七层模型三、TCP/IP协议模型总结一、分层思想分层思想将复杂的流程分解为几个功能相对单一的子过程分层优点整个流程更加清晰,复杂问题简单化更容易发现问题并针对性的解决问题二、OSI七层模型七层模型实际是把互联网的各种网络协议人为......
  • 用 IaC 的方式管理 EC2 实例 - 每天5分钟玩转 GPT 编程系列(1)
    目录写在前面你听我说HelloDevChat第一轮第二轮第三轮成果检验总结一下写在前面咳咳,开个系列吧,就叫《每天5分钟玩转GPT编程》。在这个系列里我们将分享各种借助GPT解决实际工作问题的经验,包括但不限于让GPT辅助写代码。咳咳,敲黑板:本系列文章欢迎大家投稿,分享出你使用G......
  • 软件开放机构、OSI七层协议、TCP协议和UDP协议
    软件开发架构网络编程:我们要基于网络来编写一款B/S或者是C/S架构的软件,比如:ATM,我们只写写的ATM系统都是单机版本的,没有接入网络的系统,别人时无法访问到的#目的:""" 以ATM为例,现在我们想把之前写的ATM系统编程基于网络传输的,别人如果想用,就必须把客户端下载到本地电脑上,以登......