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()
  • 相关阅读:
    硬盘参数你都懂吗?(上)-从案例引发的讨论
    Python 面试题(下)
    Python 面试题(上)
    DNS 原理入门
    从硬盘设计思想到RAID改良之道
    (转)短信vs.推送通知vs.电子邮件:app什么时候该用哪种方式来通知用户?
    (转)移动端主动推送消息原理
    (转)OpenFire源码学习之十七:HTTP Service插件
    (转)openfire插件开发(二) 基于web的插件开发
    (转)openfire插件开发(一)
  • 原文地址:https://www.cnblogs.com/chen55555/p/10318195.html
Copyright © 2011-2022 走看看