文章目录
- socket创建服务器流程
- socket创建客户端程序
python标准库提供了
socket
模块用于建立服务器与客户端,并且可以相互通信。
-
服务器端建立起一个socket对象,并等待客户端连接。
-
客户端使用socket对象与服务器连接,连接成功就可以进行相互通信(即传输数据)
socket模块的
socket对象是socket网络编程的基础对象,其原型为:
socket(family, type, proto)参数说明:- family: 地址族,可选参数,默认为 AF_INET(IPv4), 也可以是AF_INET6或AF_UNIX;- type: socket类型,可选参数,默认为 SOCK_STREAM(TCP协议),也可用 SOCKET_DGRAM(UDP协议)- proto: 协议类型,可选参数,默认为0
socket对象主要有以下几个方法:
-
bind(address)
: 参数address是由IP地址和端口号构成的
元组
,如果IP为空,则表示本机。该方法的作用,使socket与服务器地址相关联
-
listen(backlog)
: 参数backlog指定在拒绝连接之前,操作系统允许它的最大挂起连接对象。最小值为0,大部分程序最多设置为5就够了。该方法的作用:将socket设置为服务器模式,之后就可以使用 accept 来等待客户端连接了
-
accept()
: 等待客户端连接,并返回一个由 socket连接 和 客户端地址 组成的
元组
-
close()
: 关闭socket, 停止本程序与服务器或客户端的连接
-
recv(buffersize[,flag])
: 用于接收远程连接传来的信息,buffersize可以设定缓冲区的大小
-
send(data[,flag])
: 向远程的连接发送信息,data应该是bytes类型的数据,其返回值为已传送的字节数
socket创建服务器流程
如下用TCP连接方式创建了一个服务器端程序
#创建服务器端程序import socketHOST = \'\'PORT = 10888s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind((HOST,PORT))s.listen(1)conn, addr = s.accept()print(\'客户端地址: \', addr)while True:data = conn.recv(1024)if not data:breakprint(\'服务器收到的数据: \', data.decode(\'utf-8\'))conn.send(data)conn.close()
由于还没有创建客户端,运行该程序会使得服务端一直处于等待客户端连接的状态,看不出效果
socket创建客户端程序
创建客户端程序比服务端简单,流程如下:
-
connect(address)
: 参数address是一个由主机名/IP和端口构成的元组
如下创建一个客户端程序:
#创建客户端程序import socketHOST = \'localhost\'PORT = 10888s = socket.socket(socket.AF_INET, type= socket.SOCK_STREAM)s.connect((HOST, PORT))data = \'你好\'while data:s.sendall(data.encode(\'utf-8\'))data = s.recv(512)print(f\'服务器返回的数据: {data.decode(\"utf-8\")}\')data = input(\'向服务器发送数据: \')s.close()
先运行服务器程序,再运行客户端程序,运行效果如下:
(左边是服务器收到的数据,右边是客户端发送和接收的数据)