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

  • 相关阅读:
    webstorm之js,css文件压缩
    Dojo的UI框架bootstrap for dojo和Dojo-Bootstrap简介
    android 之 java环境部署
    利用requestjs优化响应式移动端js加载
    前端自动化部署之gulp
    ubuntu配置LAMP
    html5的116个标签
    前端环境安装(node.js+npm+grunt+bower)
    git在webstorm中的使用
    JDK下载安装与环境变量path配置
  • 原文地址:https://www.cnblogs.com/hhh5460/p/4246961.html
Copyright © 2011-2022 走看看