网络编程UDP

UDP协议的通信优势:

 允许一个服务器同时和多个客户端通信,TCP不行

 

服务器
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
sk.bind(("127.0.0.1",9999))
conn,addr=sk.recvfrom(1024)
print(conn.decode("utf-8"))
print(addr)
sk.close()
 客户端
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
content=input(">>>")
sk.sendto(content.encode("utf-8"),("127.0.0.1",9999))
sk.close()
 

 

一个服务器同时与多个客户聊天

服务器
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
sk.bind(("127.0.0.1",9999))
while 1:
    conn,addr=sk.recvfrom(1024)
    print(conn.decode("utf-8"),addr)
    content=input(">>>")
    sk.sendto(content.encode("utf-8"),addr)
sk.close()
客户端
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
while 1:
    content=input(">>>")
    sk.sendto(content.encode("utf-8"),("192.168.12.63",8090))
    conn,addr=sk.recvfrom(1024)
    print(conn.decode("utf-8"),addr)
sk.close()

署名聊天

服务器
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
sk.bind(("127.0.0.1",8888))
while 1:
    conn,addr=sk.recvfrom(1024)
    print(conn.decode("utf-8"),addr)
    content=input(">>>")
    sk.sendto(content.encode("utf-8"),addr)
sk.close()
客户端
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
name=input("请输入你的名字:")
while 1:
    content=input(">>>")
    use_name=name+":"+content
    sk.sendto(use_name.encode("utf-8"),("127.0.0.1",8888))
    conn,addr=sk.recvfrom(1024)
    print(conn.decode("utf-8"),addr)
sk.close()

 

pycharm输出带颜色:

 \033[字体颜色;背景颜色m   数据   \033[0m

 

字体加颜色和背景色
print("abc")
print("\033[32m abc \033[0m")
print("\033[32;40m abc \033[0m")
#格式:
  设置颜色开始 :\033[显示方式;前景色;背景色m
#说明:
前景色            背景色           颜色
---------------------------------------
               40              黑色
               41              红色
               42              绿色
               43              黃色
               44              蓝色
               45              紫红色
               46              青蓝色
               47              白色
显示方式           意义
-------------------------
               终端默认设置
               高亮显示
               使用下划线
               闪烁
               反白显示
               不可见
 
#例子:
\033[1;31;40m    <!--1-高亮显示 31-前景色红色  40-背景色黑色-->
\033[0m          <!--采用终端默认设置,即取消颜色设置-->

print('\033[0;32;40m欢迎使用学生选课系统\033[0m')
try:
    num = int(input('请输入数字选择功能 :'))
except Exception as e:
    print('\033[31m对不起!您输入的内容有误~\033[0m')
print('\033[0;36m爆竹声中一岁除,')
print('春风送暖入屠苏。')
print('千门万户曈曈日,')
print('总把新桃换旧符。\033[0m')

结果:



字体加颜色通信
服务器
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
sk.bind(("127.0.0.1",6666))
dic={"小明":"\033[32m","小红":"\033[33m","小李":"\033[35m"}
while 1:
    conn,addr=sk.recvfrom(1024)
    conn=conn.decode("utf-8")
    name=conn.split(":")[0].strip()
    color=dic.get(name,'')
    print('%s %s \33[0m' % (color,conn))
    content=input(">>>")
    sk.sendto(content.encode("utf-8"),addr)
sk.close()
客户端
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
name=input("请输入你的名字:")
while 1:
    content=input(">>>")
    use_name=name+":"+content
    sk.sendto(use_name.encode("utf-8"),("127.0.0.1",6666))
    conn,addr=sk.recvfrom(1024)
    print(conn.decode("utf-8"),addr)
sk.close()

 

字体带颜色加退出逻辑
服务器
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
sk.bind(("127.0.0.1",6666))
dic={"小明":"\033[32m","小红":"\033[33m","小李":"\033[35m"}
while 1:
    conn,addr = sk.recvfrom(1024)
    conn = conn.decode("utf-8")
    name = conn.split(":")[0].strip()
    color = dic.get(name,'')
    print('%s %s \33[0m' % (color,conn))
    if conn.split(":")[1] == "q":
        break
    content = input(">>>")
    sk.sendto(content.encode("utf-8"),addr)
    if content == "q":
        break
sk.close()
客户端
import socket
sk=socket.socket(type=socket.SOCK_DGRAM)
name=input("请输入你的名字:")
while 1:
    content=input(">>>")
    use_name=name+":"+content
    sk.sendto(use_name.encode("utf-8"),("127.0.0.1",6666))
    if content == "q":
        break
    conn,addr=sk.recvfrom(1024)
    print(conn.decode("utf-8"),addr)
    if conn.decode("utf-8") == "q":
        break
sk.close()

 

 

 

 

 

 


 

posted @ 2018-08-13 15:37  chenyibai  阅读(220)  评论(0编辑  收藏  举报