socket¶
socket是网络连接端点.例如,当你的web浏览器请求baidu的时候,你的web浏览器创建一个socket并命令它去连接baidu的web服务器,web服务器也对过来的请求在一个socket上进行监听.两端使用各自的socket来发送和接收信息.
在使用的时候,每个socket都被绑定到一个特定的IP地址和端口,IP地址是一个由4个数组成的序列,这4个数均是范围0255中的值;端口数值的取值范围是065535.端口数小于1024的为系统保留端口,最大的保留数被存储在socket模块的IPPORT_RESERVED变量中.
不是所有的IP地址都对世界的其他地方可见,实际上,一些是专门为那些非公共的地址所保留的(比如,192.168.y.z或10.x.y.z). 127.0.0.1是本机回环地址,程序可以使用这个地址来连接运行在同一计算机上的其他程序.
python提供了两个基本的的socket模块
- 第一个是Socket,它提供了标准的BSD Sockets API
- 第二个是SocketServer,它提供了服务器中心类,可以简化网络服务器的开发.
Socket对象¶
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
参数一: 地址簇
参数 | 描述 |
---|---|
socket.AF_INET | IPv4(默认) |
socket.Af_INET6 | IPv6 |
socket.AF_UNIX | 只能够用于单一的Unix系统进程间通信 |
参数二: 类型
参数三: 协议
Socket类方法¶
Socket变成思想¶
TCP服务端
- 创建套接字,绑定套接字到本地IP与端口
- 开始监听连接
- 进入循环,不断接受客户端的连接请求
- 然后接收传来的数据,并发送给对方数据
- 传输完毕后,关闭套接字
TCP客户端
- 创建套接字,连接远端地址
- 连接后发送数据和接收数据
- 传输完毕后,关闭套接字
创建一个socket连接¶
s1.py为服务端
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import socket
# 创建一个socket对象
sk = socket.socket()
# 绑定允许连接的IP地址和端口
sk.bind(('127.0.0.1',6254))
# 服务端允许起来之后,限制客户端连接的数量,如果连接超过五个,第六个连接进来的时候直接断开第六个
sk.listen(5)
print("正在等待客户端连接...")
# 会一直阻塞,等待接收客户端的请求,如果有客户端连接会获取两个值,conn=创建的连接,address=客户端的IP和端口
coon,address = sk.accept()
# 输入客户端的连接和客户端的地址信息
print(address,coon)
c1.py
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import socket
# 创建一个socket对象
obj = socket.socket()
# 指定服务端的IP地址和端口
obj.connect(('127.0.0.1',6254,))
# 连接完成之后关闭连接
obj.close()