zoukankan      html  css  js  c++  java
  • 用python实现一个简单的聊天功能,tcp,udp,socketserver版本

    基于tcp协议版本

    服务器端

    import socket
    
    server = socket.socket()
    server.bind(('127.0.0.1', 8001))
    server.listen(5)
    
    flag = 1
    while flag:
        conn, addr = server.accept()
    
        while 1:
            send_msg = input('msg:').strip().lower()
            conn.send(send_msg.encode())
            if send_msg == 'q':
                flag = 0
                break
            msg = conn.recv(1024).decode()
            if msg == 'q': break
            print(msg)
        print('当前客户端断开连接等待新的连接')
        cmd = input('输入(q)退出,其他返回聊天:').strip().lower()
        if cmd == 'q':
            flag = 0
        conn.close()
    
    server.close()

    客户端

    import socket
    
    client = socket.socket()
    client.connect(('127.0.0.1', 8001))
    while 1:
        # client.send(b'byebye')
        msg = client.recv(1024).decode().lower()
        print(msg)
        if msg == 'q': break
        send_msg = input('msg:').lower().strip()
        client.send(send_msg.encode())
        if send_msg == 'q': break
    
    
    client.close()

    基于tcp协议socketserver版本

    服务器端

    import socketserver
    
    
    class Myserver(socketserver.BaseRequestHandler):
        def handle(self):
            conn = self.request     # 相当于conn = server.accept()
            while True:
    
                msg = conn.recv(1024).decode()
                print(msg)
                content = input('>>>>')
                conn.send(content.encode())
    
    
    server = socketserver.ThreadingTCPServer(('127.0.0.1', 8001), Myserver)
    
    server.serve_forever()

    客户端

    import socket
    
    client = socket.socket()
    
    client.connect(('127.0.0.1', 8001))
    
    while True:
        content = input('>>>>')
        client.send(content.encode())
        msg = client.recv(1024).decode()
        print(msg)
    
    client.close()

    基于udp协议版本

    服务器端

    import socket
    
    server = socket.socket(type=socket.SOCK_DGRAM)
    server.bind(('127.0.0.1', 9000))
    while True:
        msg, clt_addr = server.recvfrom(1024)
        print(msg.decode())
        content = input('>>>')
        server.sendto(content.encode(), clt_addr)
    
    sk.close()

    客户端

    import socket
    
    client = socket.socket(type=socket.SOCK_DGRAM)
    
    count = 0
    while True:
        count += 1
        content = input('>>>')
        content = '%s : %s' % (count, content)
        client.sendto(content.encode(), ('127.0.0.1', 9000))
        msg, addr = client.recvfrom(1024)
        print(msg.decode())
    
    sk.close()
  • 相关阅读:
    Jupsh_flutter Android 收不到消息 / 排查不出请根据第 9 点说明提供信息
    angular表单 Dom获取表单值以及双向数据绑定
    angular中的组件以及组件中的模板合成
    Flutter开发的app进行设备判断是Ios还是android
    Java的封装
    GCD编程 之 略微提高篇
    多线程基础(六)GCD基础
    我遇到的CocoaPods的问题(也许后期会解决,持续更新)
    iOS之通过PaintCode快速实现交互动画的最方便方法 未解问题
    多线程基础(五)NSThread线程通信
  • 原文地址:https://www.cnblogs.com/chen55555/p/10318195.html
Copyright © 2011-2022 走看看