python用websockets创建服务端websocket创建客户端

服务端

import asyncio
import json
import base64
import time
import cv2
import numpy as np
import websockets


class WebServer:
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.start_server = self.connect()
        self.clients = []

    async def echo(self, websocket, path):
        self.clients.append(websocket)
        client_ip, client_port = websocket.remote_address
        await websocket.send(json.dumps({"type": "handshake"}))

        while True:
            try:
                recv_text = await websocket.recv()
                with open("aa.txt", "w") as f:
                    f.write(recv_text)
                print(recv_text )
                msg = "收到消息"
                await websocket.send(msg)
                await asyncio.sleep(0.2)

            except websockets.ConnectionClosed:
                print("ConnectionClosed...", path)  # 链接断开
                self.clients.remove(websocket)
                break
            except websockets.InvalidState:
                print("InvalidState...")  # 无效状态
                self.clients.remove(websocket)
                break
            except Exception as e:
                print(e)
                # self.clients.remove(websocket)
                # break

    async def send_msg(self, msg, websocket):
        print('send msg:', msg)
        if websocket is not None:
            await websocket.send(msg)
        await asyncio.sleep(0.2)

    async def broadcast_msg(self, msg):
        for user in self.clients:
            await user.send(msg)

    def connect(self):
        start_server = websockets.serve(self.echo, self.host, self.port)
        print("连接成功!")
        return start_server

    def run(self):
        print("已启动!")
        asyncio.get_event_loop().run_until_complete(self.start_server)
        asyncio.get_event_loop().run_forever()


if __name__ == '__main__':
    ws = WebServer("192.168.6.28", 8000)
    ws.run()

客户端

import json
import websocket


class WebClient:
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.conn = None
        self.flag = False

    def connect(self):
        try:
            url = f"ws://{self.host}:{self.port}"
            self.conn = websocket.create_connection(url)
            self.flag = True
        except Exception as err:
            self.flag = False

    def close(self):
        self.conn.close()

    def recv(self):
        data = self.conn.recv(1024)
        print(data)

    def send(self, data):
        self.conn.send(data)


if __name__ == '__main__':
    host = "192.168.6.28"
    # host = "127.0.0.1"
    port = 8000
    ws = WebClient(host, port)
    if not ws.flag:
        ws.connect()
    with open("bb.txt") as f:
        data = f.read()
    ws.send(data)

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值