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。  大侠救我!!!)

  • 相关阅读:
    线段树专辑—— pku 1436 Horizontally Visible Segments
    线段树专辑——pku 3667 Hotel
    线段树专辑——hdu 1540 Tunnel Warfare
    线段树专辑—— hdu 1828 Picture
    线段树专辑—— hdu 1542 Atlantis
    线段树专辑 —— pku 2482 Stars in Your Window
    线段树专辑 —— pku 3225 Help with Intervals
    线段树专辑—— hdu 1255 覆盖的面积
    线段树专辑—— hdu 3016 Man Down
    Ajax跨域访问
  • 原文地址:https://www.cnblogs.com/hhh5460/p/4246961.html
Copyright © 2011-2022 走看看