zoukankan      html  css  js  c++  java
  • python+soket实现UDP协议的客户/服务端中文聊天程序

    没什么特别的东西,网上烂大街的C/S框架。(基于windows 7 + python 3.4)

    为了实现中文聊天,我加入了一点修改:

    msg.encode('utf-8') # msg 为输入(且将要发送出)的信息
    
    data.decode('utf-8') # data 为接收的信息

    这样做的原因是 sendto 函数只能发送ASCII字符,不支持发送中文(在 python3 中,中文默认是unicode编码)。

    所以,信息在送出之前要编码,在接收到信息之后要解码

    完整的两个文件如下:

    #udp-server.py
    '''服务器'''
    
    from socket import *
    
    host = ''  #服务器地址
    port = 12345  #服务器端口
    bufsiz = 2048 #缓存大小
    adds = (host, port) #地址+端口
    
    udpsersock = socket(AF_INET, SOCK_DGRAM)  #创建UDP的套接字类型。
    udpsersock.bind(adds)  #绑定到地址和端口
    
    while True:
        msg = input('服务器说:')    #输入数据
        data, addc = udpsersock.recvfrom(bufsiz)
        udpsersock.sendto(msg.encode('utf-8'), addc)
        
        if not data: break
        print('客户端回答:', data.decode('utf-8'))
        
    udpsersock.close()
    #udp-client.py
    '''客户端'''
    
    from socket import *
    
    host = 'localhost'  #本地服务器地址
    port = 12345  #客户端端口(确保和服务器的端口一致
    bufsiz = 2048 #缓存大小
    addc = (host, port) #地址+端口
    
    udpclisock = socket(AF_INET, SOCK_DGRAM)  #创建UDP的套接字类型。
    
    while True:
        msg = input('客户端说:')    #输入数据
        udpclisock.sendto(msg.encode('utf-8'), addc)
        data, adds = udpclisock.recvfrom(bufsiz)
        
        if not data: break
        print('服务器回答:', data.decode('utf-8'))
        
    udpclisock.close()

    运行结果如图:

    (吐槽:python的input怎么按回车键没用啊,只能Ctrl + D + Enter。  大侠救我!!!)

  • 相关阅读:
    2018年9月28日CCPC秦皇岛站参赛总结
    数学:二次剩余与n次剩余
    数学:拓展Lucas定理
    BZOJ2301:莫比乌斯反演+二维容斥解决GCD范围计数
    数学:莫比乌斯反演-约数个数和
    数学:莫比乌斯反演-GCD计数
    关于cnblogs至github上blog的搬迁
    友链——一群dalao
    折半搜索(meet in the middle)
    关于爆搜
  • 原文地址:https://www.cnblogs.com/hhh5460/p/4246961.html
Copyright © 2011-2022 走看看