将服务端-客户端的连接比作双方打电话的过程
主动的一方:
客户端实例化一个socket对象--> 主动像服务端发送连接请求--> (服务端接受请求后即可进行数据传输--> )请求成功后发送信息--> (服务端收到数据信息后反馈一个数据信息给客户端,确认操作成功--> )关闭进程
####
——手机通话过程
买手机——>打电话——>说话(发信息)——>听对面说话(收信息)——>沟通完成后挂电话
import socket #买手机 -- 套接字家族 | 端口协议 phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #直接打电话 连接服务端 -- 给一个地址- ip | 端口号 phone.connect((‘127.0.0.1‘,1000)) #接通电话后发信息 phone.send(‘hello‘.encode(‘utf-8‘)) #接收反馈信息 指定一次接收的量 data = phone.recv(100) print(‘信息为: ‘,data) #关机 phone.close()
被动的一方:
实例化一个socket对象--> *设置一个监听地址(提供一台电脑的唯一标识—ip+端口号)*-->*设置最大监听数量*-->
接受客户端来的一个连接请求--> 连接成功后接收客户端发来的信息--> 发送反馈信息给客户端--> 关闭该连接请求(可能不止一个连接请求)--> 没有连接请求后关闭进程
####
——手机通话过程
买电话——>*买一张电话卡(唯一一台设备)【提供给客户端一个地址来连接服务端】*——>*开机(处于监听状态,有一个最大监听数量)*——>
接一个电话——>接收到对方的信息——>回复一个信息——>打完电话后挂断电话——>关机(不再监听)
import socket #买手机 -- 套接字家族 | 端口协议 phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买电话卡 -- 监听一个地址- ip | 端口号 phone.bind((‘127.0.0.1‘,1000)) #开机 指定监听的最大数量 **backlog -- 半连接池**所有的电话均在其中等待 phone.listen(5) #等电话-接电话 电话接通后会得到(return sock, addr) accept() -> (socket object, address info) #tcp链接 | 客户端地址? link, addr = phone.accept() # **从backlog中拿出一个电话接通** #电话接通后接收信息 指定一次接收信息的数量 data = link.recv(100) print(‘信息为: ‘,data) #接收到信息后,反馈给client端一个信息,以告诉他已成功接收 link.send(data) #完成一切操作后关掉link,再关机 link.close() phone.close()
原文:https://www.cnblogs.com/xxp1624/p/11240789.html