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模块

  1. 第一个是Socket,它提供了标准的BSD Sockets API
  2. 第二个是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服务端

  1. 创建套接字,绑定套接字到本地IP与端口
  2. 开始监听连接
  3. 进入循环,不断接受客户端的连接请求
  4. 然后接收传来的数据,并发送给对方数据
  5. 传输完毕后,关闭套接字

TCP客户端

  1. 创建套接字,连接远端地址
  2. 连接后发送数据和接收数据
  3. 传输完毕后,关闭套接字

创建一个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()
python-028-1

python-028-1