• python之路----TCP与UDP


    TCP

    import socket
    #tcp协议
    sk = socket.socket()     # 买手机 创建一个socket对象
    sk.bind(('127.0.0.1',8080))  # 给server端绑定一个ip和端口
    sk.listen()              # py3.4
    while True:
        conn,addr = sk.accept()  # 获取到一个客户端的连接, 已经完成了三次握手建立了一个连接
                                 # 阻塞
        while True:
            msg = conn.recv(1024).decode('utf-8')    # 阻塞,直到收到一个客户端发来的消息
            print(msg)
            if msg == 'bye':break
            info = input('>>>')
            if info == 'bye':
                conn.send(b'bye')
                break
            conn.send(info.encode('utf-8'))     # 发消息
        conn.close()             # 关闭连接
    sk.close()               # 关闭socket对象,如果不关闭,还能继续接收
    # server client1 建立了长连接
    # client2
    server
    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1',8080))
    while True:
        msg = input('>>>')
        if msg == 'bye':
            sk.send(b'bye')
            break
        sk.send(msg.encode('utf-8'))
        ret = sk.recv(1024).decode('utf-8')
        if ret == 'bye':break
        print(ret)
    sk.close()
    client
    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1',8080))
    while True:
        msg = input('client2:>>>')
        if msg == 'bye':
            sk.send(b'bye')
            break
        sk.send(('client2 :'+msg).encode('utf-8'))
        ret = sk.recv(1024).decode('utf-8')
        if ret == 'bye':break
        print(ret)
    sk.close()
    client2

    UDP

    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)  #DGRAM datagram
    sk.bind(('127.0.0.1',8080))       #只有服务端有的
    
    msg,addr = sk.recvfrom(1024)
    print(msg.decode('utf-8'))
    sk.sendto(b'bye',addr)
    
    sk.close()
    server
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    ip_port = ('127.0.0.1',8080)
    
    sk.sendto(b'hello',ip_port)
    ret,addr = sk.recvfrom(1024)
    print(ret.decode('utf-8'))
    
    sk.close()
    client

    UDP协议实现qq聊天

    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    sk.bind(('127.0.0.1',8080))
    while True:
        msg,addr = sk.recvfrom(1024)
        print(addr)
        print(msg.decode('utf-8'))
        info = input('>>>').encode('utf-8')
        sk.sendto(info,addr)
    
    sk.close()
    server
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    ip_port = ('127.0.0.1',8080)
    while True:
        info = input('tiger :')
        info = ('33[34m来自tiger的消息 :%s33[0m'%info).encode('utf-8')
        sk.sendto(info,ip_port)
        msg,addr = sk.recvfrom(1024)
        print(msg.decode('utf-8'))
    
    sk.close()
    client1
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    ip_port = ('127.0.0.1',8080)
    while True:
        info = input('二哥 :')
        info = ('33[32m来自二哥的消息 :%s33[0m'%info).encode('utf-8')
        sk.sendto(info,ip_port)
        msg,addr = sk.recvfrom(1024)
        print(msg.decode('utf-8'))
    
    sk.close()
    client2

    UDP实现系统时间同步

    # 提供服务
    # 接收信息 时间的格式
    # 将我的时间转换成 接受到的格式
    # 发回给客户端

    import time
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    sk.bind(('127.0.0.1',8090))
    while True:
        strf,addr = sk.recvfrom(1024)
        strf = strf.decode('utf-8')
        res = time.strftime(strf).encode('utf-8')
        sk.sendto(res,addr)
    sk.close()
    server
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    addr = ('127.0.0.1',8090)
    info = input('>>>').encode('utf-8')
    sk.sendto(info,addr)
    ret,addr = sk.recvfrom(1024)
    print(ret.decode('utf-8'))
    
    sk.close()
    client
  • 相关阅读:
    java使用google开源工具实现图片压缩
    MyBatis实现Mysql数据库分库分表操作和总结
    简单记录你博客园的访问人数
    细说spring事务配置属性
    hazelcast初探
    jstorm之于storm
    如何让其他机器访问你的oracle数据库
    问题解决:bash: fork: retry: Resource temporarily unavailable
    分布式锁的几种实现方式
    建立索引的原则总结
  • 原文地址:https://www.cnblogs.com/TheLand/p/8360093.html
Copyright © 2020-2023  润新知