ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python笔记之socket

2020-01-27 17:03:33  阅读:148  来源: 互联网

标签:socket python 笔记 address 接字 连接 Socket 客户端


python支持网络编程,提供了socket模块,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。

下面简单了解一下socket

Socket又称“套接字”用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。Socket是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的Socket系统调用。客户随机申请一个Socket,系统为之分配一个Socket号;服务器拥有全局公认的Socket,任何客户都可以向它发出连接请求和信息请求。

socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

 

 

 

根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

(1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

(2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

(3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

 

 

 

Socket类型
套接字格式:
socket(family,type[,protocal]) 使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字。
常用的socket类型如下:

Socket类型 描述
socket.AF_INET 服务器之间网络通信
socket.SOCK_STREAM 流式socket , 用于TCP协议
socket.SOCK_DGRAM 数据报式socket , 用于 UDP协议

创建TCP Socket:=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
创建UDP Socket:s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

Socket 函数
常用的socket函数如下:

socket函数 描述
服务端socket函数
s.bind(address) 将套接字绑定到地址, 在AF_INET下,以元组(host,port)的形式表示地址.
s.listen(backlog) 开始监听TCP传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。
s.accept() 接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。
客户端socket函数
s.connect(address) 连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
公共socket函数
s.recv(bufsize[,flag]) 接受TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。
s.send(string[,flag]) 发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。
s.sendall(string[,flag]) 完整发送TCP数据。将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
s.recvfrom(bufsize[.flag]) 接受UDP套接字的数据。与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。
s.sendto(string[,flag],address) 发送UDP数据。将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。
s.close() 关闭套接字。

 使用socket进行做接口测试编程思路:

TCP客户端: 

1 创建套接字,连接远端地址 

 socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #创建套接字实例

 s.connect((host,port))  #链接服务器 

2 连接后发送数据和接收数据         

 s.send()  #发送请求数据

 s.recv()  #接收相应数据 

3 传输完毕后,关闭套接字         

s.close() 

 

服务端结构:

s= socket() #创建服务器套接字
s.bind()      #把地址绑定到套接字
s.listen()      #监听链接
while True:      #服务器无限循环
    tcpc = s.accept() #接受客户端链接
    while True:         #通讯循环
        tcpc.recv()/tcpc.send() #对话(接收与发送)
    tcpc.close()    #关闭客户端套接字
s.close()        #关闭服务器套接字(可选)


客户端结构:

s= socket()    # 创建客户端套接字
s.connect()    # 尝试连接服务器
while True:        # 通讯循环
    s.send()/s.recv()    # 对话(发送/接收)
s.close()      # 关闭客户套接字

标签:socket,python,笔记,address,接字,连接,Socket,客户端
来源: https://www.cnblogs.com/heertong/p/12236321.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有