zoukankan      html  css  js  c++  java
  • python使用udp实现聊天器

    聊天器简易版

    使用udp实现一个简单的聊天器程序,要求如下:

    • 在一个电脑中编写1个程序,有2个功能
    • 1.获取键盘数据,并将其发送给对方
    • 2.接收数据并显示
    • 并且功能数据进行选择以上的2个功能调用

    例子程序如下:

    import socket
    
    
    def send_message(udp_socket):
        
            # 输入对方的ip/port
            dest_ip = input("请输入对方的ip:")
            dest_port = int(input("请输入对象的port:"))
        
            # 读取输入的数据
            send_data = input('请输入要发送的数据:')
        
            # 发送数据
            dest_addr = (dest_ip, dest_port)
            udp_socket.sendto(send_data.encode('GBK'), dest_addr)
    
    
    def recv_message(udp_socket):
    
            # 接收数据
            recv_data = udp_socket.recvfrom(1000)
            print("%s:%s" % (recv_data[1], recv_data[0].decode("utf-8")))   
    
    
    def main():
            # 创建套接字
            udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        
            while True:
                    send_message(udp_socket)
                    recv_message(udp_socket)
        
            # 关闭
            udp_socket.close()
        
    
    
    if __name__ == '__main__':
            main()
    

    运行程序:

    在聊天助手中进行交互:

    聊天器灵活版

    上面实现的聊天虽然可以使用,但是不太方便,我们希望是发送消息还是接受消息,可以自己选择,这样就方便的多。如下的程序运行输入三个命令来选择要执行的操作,程序如下:

    • 1表示发送数据
    • 2表示接收数据
    • 0表示退出
    import socket
    
    
    def send_message(udp_socket):
        
            # 输入对方的ip/port
            dest_ip = input("请输入对方的ip:")
            dest_port = int(input("请输入对象的port:"))
        
            # 读取输入的数据
            send_data = input('请输入要发送的数据:')
        
            # 发送数据
            dest_addr = (dest_ip, dest_port)
            udp_socket.sendto(send_data.encode('GBK'), dest_addr)
    
    
    def recv_message(udp_socket):
    
            # 接收数据
            recv_data = udp_socket.recvfrom(1000)
            print("%s:%s" % (recv_data[1], recv_data[0].decode("utf-8")))   
    
    
    def main():
            # 创建套接字
            udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        
            while True:
        
                    op = input("请输入您要执行的操作:")
        
                    if op == "1":
                            send_message(udp_socket)
                    elif op == "2":
                            recv_message(udp_socket)
                    elif op == "0":
                            break
                    else:
                            print("您的输入有误!")
        
            # 关闭
            udp_socket.close()
        
    
    
    if __name__ == '__main__':
            main()
    
    

    在ubuntu安装网络助手

    将下载好的网络助手的安装包(mNetAssist-release-amd64.deb)拷贝到桌面,执行如下操作:

    $ cd ~/Desktop
    $ sudo dpkg -i mNetAssist-release-amd64.deb
    [sudo] password for xxxx:
    Selecting previously unselected package mnetassist.
    (Reading database ... 182763 files and directories currently installed.)
    Preparing to unpack mNetAssist-release-amd64.deb ...
    Unpacking mnetassist (0.1.1) ...
    Setting up mnetassist (0.1.1) ...
    Processing triggers for gnome-menus (3.13.3-6ubuntu3.1) ...
    Processing triggers for desktop-file-utils (0.22-1ubuntu5.1) ...
    Processing triggers for bamfdaemon (0.5.3~bzr0+16.04.20160824-0ubuntu1) ...
    Rebuilding /usr/share/applications/bamf-2.index...
    Processing triggers for mime-support (3.59ubuntu1) ...
    

    如果没有抱错,安装成功,点击左上角的启动栏,输入mnetAssist

    点击图标启动应用即可。

  • 相关阅读:
    现在, Delphi 的多线程已经非常易用了!
    发现 TSplitter 在嵌套时不好用, 索性写了个替代品
    关于显示透空歌词的思路 回复 "zhaoboaidelphi" 的问题
    简单获取钢琴 88 个键的音高频率值
    准备理一下菜单和工具栏相关的组件
    在 StringGrid 上画线时, 使用 GDI+ 以消除锯齿 回复 "gsjn_8888_6666" 的问题
    解压 svgz 到 svg
    jQuery能做到,PHP能做到,C#也能做到
    监测ASP.NET应用程序性能最简单的方法
    支持高并发的IIS Web服务器常用设置
  • 原文地址:https://www.cnblogs.com/zhangfengxian/p/python-udp-simple-chat.html
Copyright © 2011-2022 走看看