zoukankan      html  css  js  c++  java
  • 网络编程 tcp udp 时间同步机制 代码

    import  socket
    sk = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM,)
    参数1 family: 套接字类型   
    参数2 type  : 通信协议类型 tcp协议,udp协议
    tcp协议:SOCK_STREAM
    udp协议:SOCK_DGRAM
    family=socket.AF_INET  采用网络形式通信的套接字
    family=socket.AF_UNIX  采用文件类型通信的套接字

    TCP一人聊天:

    服务器:

    import socket
    sk = socket.socket(type = socket.SOCK_STREAM)    # 采用tcp协议   买了个新手机
    sk.bind(('192.168.19.200',9090)) # 端口号范围:0-65535     0 - 1023(不能用)  
    8000 - 10000  (常用)        买一个手机卡
    sk.listen()              # 告诉好友我的新手机号
    print(123)
    conn,addr = sk.accept()         # 等待好友来给我打电话     #(三次握手)
    print(456)
    msg = conn.recv(1024)     # 聊天   (recv接收消息)
    print(msg.decode('utf-8'),addr,conn)
    conn.send(b'hahaha')         (send发送消息)
    conn.close()       # 挂掉电话
    sk.close()    # 关机        #(四次挥手在两个close之间)
    View Code

    客户端;

    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1',9200))
    sk.send(b'hello')
    sk.close()
    View Code

    TCP多人聊天:

    服务器:

    import socket
    sk = socket.socket(type=socket.SOCK_STREAM)
    sk.bind(('127.0.0.1',9090))
    sk.listen()
    
    while 1:   #(接收多个连接针对 conn,addr = sk.accept())
        # print(123)
        conn,addr = sk.accept() #  等待连接 -- 阻塞
        # print(456)
        while 1:    # (接收多个消息)
            # print(789)
            msg_r = conn.recv(1024).decode('utf-8') # 阻塞等待接收客户端发来的消息
         # print('jqk')
            print('接收到来自%s的一个消息:%s' % (addr, msg_r))
            if msg_r == 'q':
                break
            msg_s = input('>>>')
            conn.send(msg_s.encode('utf-8'))      # 发送给客户端消息
         if msg_s == 'q':
                break
        conn.close()# 服务器和当前客户端断开连接,程序回到上一层死循环,重新等待客户端的连接
    sk.close()
    View Code

    客户端:

    import  socket
    sk = socket.socket()
    sk.connect(('127.0.0.1',9090))
    
    while 1:
        msg_s = input('>>>')
        sk.send(msg_s.encode('utf-8'))
        if msg_s == 'q':
            break
        msg_r = sk.recv(1024).decode('utf-8')
        print(msg_r)
        if msg_r == 'q':
            break
    
    sk.close()
    View Code

    UDP:一人聊天:

    服务器:

    import socket
    
    sk = socket.socket(type=socket.SOCK_DGRAM)   #  udp协议
    sk.bind(('127.0.0.1',9040))
    msg_r,addr = sk.recvfrom(1024)     #接收来自哪里的消息
    print(msg_r)
    sk.sendto(b'oo',addr)
    sk.close()
    View Code

    客户端:

    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    
    sk.sendto(b'hi',('127.0.0.1',9040))  #发给谁一条消息
    msg_r,addr = sk.recvfrom(1024)
    print(msg_r)
    
    sk.close()
    View Code

    UDP:多人聊天:

    服务器:

    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)   # udp协议
    sk.bind(('127.0.0.1',9090))
    while 1:
        msg_r,addr = sk.recvfrom(1024)   # 接收来自哪里的消息
        msg_r = msg_r.decode('utf-8')     
        print(msg_r)
        if msg_r == 'q':        # 如果当前客户端想要断开连接
            continue     # 服务器端不应该继续通话了,应该等待接收另一个客户端的连接,返回到recvfrom
        msg_s = input('>>>')
        sk.sendto(msg_s.encode('utf-8'), addr)
        if msg_s == 'q':
            break
    sk.close()
    View Code

    客户端:

    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    
    while 1:
        msg_s = input('>>>')
        sk.sendto(msg_s.encode('utf-8'),('127.0.0.1',9090))# 发给谁一条消息
        if msg_s is 'q':
            break
        msg_r,addr = sk.recvfrom(1024)
        msg_r = msg_r.decode('utf-8')
        print(msg_r)
        if msg_r == 'q':
            break
    
    sk.close()
    View Code

    UDP带颜色版多人聊天:

    服务器:

    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)   # udp协议
    sk.bind(('127.0.0.1',9090))
    dic = {'alex':'33[0;33;42m','太白':'33[0;35;40m'}
    while 1:
        msg_r,addr = sk.recvfrom(1024)   # 接收来自哪里的消息
        msg_r = msg_r.decode('utf-8')      # alex : 我要退学
        # 对于msg_r,通过':'分割,获取下标为0的,也就是name,再去掉name的左右两边的空格
        name = msg_r.split(':')[0].strip()
    
        color = dic.get(name,'')    # 获取字典中 name所对应的 颜色值
        print('%s%s 33[0m'%(color,msg_r))
        if msg_r == 'q':        # 如果当前客户端想要断开连接
            continue     # 服务器端不应该继续通话了,应该等待接收另一个客户端的连接,返回到recvfrom
        msg_s = input('>>>')
        sk.sendto(msg_s.encode('utf-8'), addr)
        if msg_s == 'q':
            break
    sk.close()
    View Code

    客户端:

    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    name = input('请输入您的名字:>>>')
    while 1:
        msg_s = input('>>>')
        msg_s = name + " : "+msg_s
        sk.sendto(msg_s.encode('utf-8'),('127.0.0.1',9090))# 发给谁一条消息
        if msg_s is 'q':
            break
        msg_r,addr = sk.recvfrom(1024)
        msg_r = msg_r.decode('utf-8')
        print(msg_r)
        if msg_r == 'q':
            break
    
    sk.close()
    View Code

    UDP时间同步机制:

    服务器:

    import socket
    import time
    sk = socket.socket(type=socket.SOCK_DGRAM)
    
    sk.bind(('127.0.0.1',9090))
    
    while 1:
        tm_format,addr = sk.recvfrom(1024)
        tm_format = tm_format.decode('utf-8')# %Y-%m\%d %H:%M:%S
        local_tm = time.strftime(tm_format)# 获取到了对应格式的当前时间
      sk.sendto(local_tm.encode('utf-8'),addr)# 返回给客户端
    
    sk.close()
    View Code

    客户端:

    import socket
    import time
    sk = socket.socket(type=socket.SOCK_DGRAM)
    tm_format = input('>>>')
    while 1:
        sk.sendto(tm_format.encode('utf-8'),('127.0.0.1',9090))
        local_tm,addr = sk.recvfrom(1024)
        print(local_tm.decode('utf-8'))
        time.sleep(2)
    View Code
  • 相关阅读:
    npm教程2
    02.RIP——CCNP学习笔记
    01.静态路由——CCNP学习笔记
    The 10th SWJTU ACM Online Tutorial
    visual studio 2005 常用按键
    Python垃圾回收机制
    私人网盘系统2.0—全部升级为layUI+PHP(持续更新中)
    Layui框架+PHP打造个人简易版网盘系统
    翻译app的开发全过程---编码+打包+上架
    值得认真学习的6 个 JavaScript 框架
  • 原文地址:https://www.cnblogs.com/ls13691357174/p/9329141.html
Copyright © 2011-2022 走看看