400-650-7353

精品课程

您所在的位置:首页 > IT干货资料 > python > 【Python基础知识】Socket概述

【Python基础知识】Socket概述

  • 来源:
  • 2021-08-30 16:47:05
  • 阅读()
  • 分享
  • 手机端入口

Socket是网络编程中常用的一个术语。通常一个Socket表示用计算机软件建立的一个网络链接。一个Socket的建立过程需要给出目的计算机的IP地址和端口号,再指定协议类型即可。

下面给出一个Socket的示例:

  1. >>> sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0

其中,第一个参数代表地址簇,包括如下可选项:

①socket.AF_INET,代表IPv4协议,是默认值。

②socket.AF_INET6,代表IPv6协议。

③socket.AF_UNIX,仅在UNIX操作系统进程间通信中使用。

第二个参数代表类型,包括如下可选项:

①socket.SOCK_STREAM,代表TCP协议采用的流式Socket,是默认值。

②socket.SOCK_DGRAM,代表UDP协议采用的数据报式Socket。

③socket.SOCK_RAW,代表原始套接字,采用普通的套接字不能处理ICMP、IGMP等网络报文,而采用SOCK_RAW则可以处理。SOCK_RAW也可以处理特殊的IPv4报文。此外,利用SOCK_RAW可以通过IP_HDRINCL套接字选项使用户能自己构造IP头。

④socket.SOCK_RDM,代表一种相对可靠的UDP形式,即保证交付数据报,但不保证UDP数据报的顺序。在执行某些特殊操作时需要使用SOCK_RDM,如发送ICMP报文。

⑤socket.SOCK_SEQPACKET,代表提供一种可靠的连续数据报服务。

第三个参数代表协议,0为默认值,根据地址格式和套接字类别,系统会自动选择一个合适的协议。

Socket具有很多方法,下面分类介绍。

(1)服务器端套接字方法

sk.bind(address):将套接字绑定到地址address。在AF_INET协议下,以元组(hostname, port)的形式表示地址。

sk.listen(backlog):开始监听,传入连接的最大数目。backlog指定在系统拒绝连接之前,可以挂起的最大连接数量。例如,backlog=5,表示系统已经接到了连接请求,但服务器端还没有调用accept()方法进行处理的连接个数最大为5。这个值不能无限大,因为要在系统中维护连接队列,从而需要资源。

sk.setblocking(bool):是否阻塞(默认值为True),如果设置为False,那么accept()和recv()在接收到空包无数据时报错。

sk.accept():接受TCP 客户端的连接(阻塞式),等待连接的到来,并返回(conn, address)。其中conn是新建的套接字对象,可以用来接收和发送数据;address是连接客户端的地址。

(2)客户端套接字方法

sk.connect(address):连接到address地址的套接字。address的一般格式为元组(hostname, port)。如果连接失败,返回socket.error错误。

sk.connect_ex(address):连接到address地址的套接字。address的一般格式为元组(hostname, port)。如果连接成功,返回 0 ;如果连接失败,返回编码。

(3)通用套接字方法

sk.close():关闭套接字。

sk.recv(bufsize):接收套接字的数据,数据以字符串形式返回。bufsize是缓冲区大小,指定一次最多可以接收的数据数量。

sk.recvfrom(bufsize):与recv()类似,但返回值是一个元组(data, address)。其中data是包含接收数据的字符串;address是发送数据的套接字地址。

sk.send(string):将string中的数据发送到连接的套接字。

sk.sendall(string):发送完整的TCP数据(本质就是循环调用send()。sendall()在待发送数据量大于己端缓存区剩余空间时,数据不会丢失,循环调用send()直到发完为止)。

sk.sendto(string, address):将数据发送到套接字。address的一般格式为元组(hostname, port),指定远程地址。

sk.settimeout(timeout):设置套接字操作的超时期。timeout是一个浮点数,单位为秒,值为None表示没有超时期。超时期一般应该在刚创建套接字时对于连接的操作设置(如 client 连接最多等待5s )。

学习疑问申请解答
您的姓名
您的电话
意向课程
 

中公优就业

IT小助手

扫描上方二维码添加好友,请备注:599,享学习福利。

>>本文地址:
注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。

推荐阅读

优就业:ujiuye

关注中公优就业官方微信

  • 关注微信回复关键词“大礼包”,享学习福利
QQ交流群
在线疑问解答
(加群备注“网站”)
IT培训交流群 加入群聊 +
软件测试 加入群聊 +
全链路UI/UE设计 加入群聊 +
Python+人工智能 加入群聊 +
互联网营销 加入群聊 +
Java开发 加入群聊 +
PHP开发 加入群聊 +
VR/AR游戏开发 加入群聊 +
大前端 加入群聊 +
大数据 加入群聊 +
Linux云计算 加入群聊 +
优就业官方微信
扫码回复关键词“大礼包”
享学习福利

测一测
你适合学哪门IT技术?

1 您的年龄

2 您的学历

3 您更想做哪个方向的工作?

获取测试结果
 
课程资料、活动优惠 领取通道