websocket
http协议通信只能由客户端发起;
简述:websocket 基于tcp协议 建立客户端和服务端的通信通道
例子:在python的安装路径下,创建一个文件cmd.bat,该文件中写入cmd.exe,双击cmd.bat,打开窗口然后运行python server.py 和 python client.py。
运行效果:实现client和server的实时聊天通信。
短连接——一次通信
【服务器端】
# -*-coding:utf-8 -*- import socket host='127.0.0.1' port=8001 # 创建socket对象,family表示地址家族,type代表协议类型 s=socket.socket() # 创建套接字 s.bind((host,port)) # 接收的参数是元组 s.listen(5) # 队列满了之后允许客户端连接到服务器个数 # clnt 新的套接字对象,addr 地址 clnt,addr = s.accept() # send——resave # 接收的最大数据为1024字节 data = clnt.recv(1024) print(data) clnt.sendall() s.close()
【客户端】
# -*-coding:utf-8 -*- import socket # 创建socket对象,family表示地址家族,type代表协议类型 # 创建套接字 s=socket.socket() # 连接服务器的地址 s.connect(('127.0.0.1',8002)) cmd = input('please input:')
cmd=cmd.encode() s.sendall(cmd) data=s.recv(1024) print(data) s.close()
长连接:
【服务端】
# -*-coding:utf-8 -*- import socket host='127.0.0.1' port=8002 # 创建socket对象,family表示地址家族,type代表协议类型 s=socket.socket() # 创建套接字 s.bind((host,port)) # 接收的参数是元组 s.listen(5) # 队列满了之后允许客户端连接到服务器个数 # clnt 新的套接字对象,addr 地址 clnt,addr = s.accept() print ('cline address:',addr) while True: # send——resave # 接收的最大数据为1024字节 data = clnt.recv(1024) print(data) clnt.sendall(data) s.close()
【客户端】
# -*-coding:utf-8 -*- import socket # 创建socket对象,family表示地址家族,type代表协议类型 # 创建套接字 s=socket.socket() # 连接服务器的地址 s.connect(('127.0.0.1',8002)) while True: cmd = input('please input:') if cmd == 'quit':break cmd=cmd.encode() s.sendall(cmd) data=s.recv(1024) print(data) s.close()
遇到的问题:
1、WebSocket connection to 'wss://localhost:8080/' failed: Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR