1.socket参数
socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) familt: AF_INET:网络文件套接字,默认 AF_UNIX:本地文件套接字 type: SOCK_STREAM:TCP协议,默认 SOCK_DGRAM:UDP协议 proto:通常为0 fileno:通常为None
2.TCPsocket常用方法
TCP socket |
client |
server |
实例化 |
sk = socket.socket() |
sk = socket.socket() |
绑定地址 |
/ |
sk.bind(('127.0.0.1',8888)) |
连接地址 |
sk.connect(('127.0.0.1',8888)) |
/ |
接收请求 |
/ |
conn,addr = sk.accept() |
发送消息 |
sk.send('hi!'.encode('utf-8')) |
conn.send('hi'.encode('utf-8')) |
接收消息 |
ret = sk.recv(1024) |
ret = conn.recv(1024) |
关闭client |
/ |
conn.close() |
关闭server |
sk.close() |
sk.close() |
3.UDPsocket常用方法
UDP socket |
client |
server |
实例化 |
sk = socket.socket(type=socket.SOCK_DGRAM) |
sk = socket.socket(type=socket.SOCK_DGRAM) |
绑定地址 |
/ |
sk.bind(('127.0.0.1',8888)) |
接收消息 |
message,ip = sk.recvfrom(1024) |
message,ip = sk.recvfrom(1024) |
发送消息 |
sk.sendto(str,ip) |
sk.sendto(str,ip) |
断开连接 |
sk.close() |
sk.close() |
2.基于TCP协议的服务端和客户端
#服务端 import socket sk = socket.socket() sk.bind(('127.0.0.1',8888)) #把地址绑定到套接字,IP为字符串,端口为数字 sk.listen() #监听此连接 conn,addr = sk.accept() #接受客户端链接 ret = conn.recv(1024) #接收客户端信息,指定接收的字节 print(ret) #打印客户端发来的信息 conn.send('hi'.encode('utf-8')) #向客户端发送信息,编码为字节形式 conn.close() #关闭客户端套接字 sk.close() #关闭服务器套接字(可选) #客户端 import socket sk = socket.socket() # 创建客户套接字 sk.connect(('127.0.0.1',8898)) # 尝试连接服务器 sk.send('hello!'.encode('utf-8')) #发送消息,以字节形式发送 ret = sk.recv(1024) # 接收回信 print(ret) sk.close()
3.基于UDPsocket的服务端和客户端
#服务端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) #指定UDP协议 sk.bind(('127.0.0.1',8888)) #绑定端口地址 msg,ip = sk.recvfrom(1024) #接收请求 str = 'hahaha'.encode('utf-8') sk.sendto(str,ip) #发送给客户端 sk.close() #关闭连接 #客户端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) #指定UDP协议 ip = ('127.0.0.1',8888) str = 'hi'.encode('utf-8') sk.sendto(str,ip) #发送消息 msg,ip = sk.recvfrom(1024) #接收消息 print(msg,ip) sk.close() #关闭连接
4.多连接TCPsocket服务端-socketserver
import socketserver class MySocket(socketserver.BaseRequestHandler): def handle(self):# 这个方法的名字是固定的,必须是这个名字 # 收发的逻辑代码 msg = self.request.recv(1024).decode('utf-8') self.request.send(msg.upper().encode('utf-8')) server = socketserver.TCPServer(('127.0.0.1',8080),MySocket)# 固定的 server.serve_forever()# 开启一个永久性的服务