zoukankan      html  css  js  c++  java
  • 利用Docker技术实现UDP广播效果(网络编程python版)

    docker的安装见官方文档 我使用的系统为Ubuntu16.04

    Ubuntu系统安装docker文档地址:https://docs.docker.com/engine/installation/linux/ubuntulinux/

    Ubuntu的版本必须和文档中提到的要一致

    -----------------------------------------------------------------

    1.查找相关的Ubuntu镜像

    可以去docker镜像官网:https://hub.docker.com 点击第一个查看

    也可以使用docker命令查看镜像: sudo docker search ubuntu

    2.用docker命令下拉自己想要的镜像 sudo docker pull ubuntu:16.04

    因为我这里已经下载好了,所以直接显示了状态信息。如果没有该images(镜像)的话,会从镜像官网下载,请耐心等待。

    下载成功后可以用命令 sudo docker images 查看自己下载的镜像

    这里有我下载的其他镜像, 我们下载的镜像REPOSITORY是ubuntu, TAG为16.04

    3.利用下载的ubuntu镜像安装容器: sudo docker run -it --name h1 ubuntu:16.04

     这里的--name指明了自己所要创建的容器的名字,ubuntu16.04为我们的镜像

     因为我在这里要创建两个容器,第二个容器h2和h1步骤完全一样,这里不做阐述。

     sudo docker run -it --name h2 ubuntu:16.04

     创建成功后会自动进入容器里面,使用命令exit可以退出当前容器。

     退出后可以使用 sudo docker start h1

             sudo docker attach h1(输完命令完后点一两下回车)

     输完这两个命令后就可以再次进入容器。

     进入容器后首先更新系统的源: apt-get update

       更新完成后,安装vim方面后面编写代码: apt install vim -y 

       该ubuntu是没有ifconfig和ping命令的,如果需要的可以选择安装(见我上一篇博客)

    4.好了,到这里所有的准备已经完成了。现在开始使用python编写UDP Broadcast了并查看相应的结果。

     udp_broadcast.py 

     1 #!/usr/bin/env python3
     2 # UDP client and server for broadcast messages on a local LAN
     3 
     4 import argparse, socket
     5 
     6 BUFSIZE = 65535
     7 
     8 def server(interface, port):
     9         sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    10 #       sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    11         sock.bind((interface, port))
    12         print('Listening for datagrams at {}'.format(sock.getsockname()))
    13         while True:
    14                 data, address = sock.recvfrom(BUFSIZE)
    15                 text = data.decode('ascii')
    16                 print('The client at {} says {}'.format(address, text))
    17 
    18 def client(network, port):
    19         sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    20         sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    21         text = 'Broadcast datagram!'
    22         sock.sendto(text.encode('ascii'), (network, port))
    23 
    24 if __name__=='__main__':
    25         choices = {'client':client, 'server':server}
    26         parser = argparse.ArgumentParser(description='Send and receive UDP broadcast.')
    27         parser.add_argument('role', choices=choices, help='which role to play.')
    28         parser.add_argument('host', help='interface the server listen at network the client sends to')
    29         parser.add_argument('-p', metavar='POST', type=int, default=1060, help='UDP port(default 1060)')
    30         args = parser.parse_args()
    31         function = choices[args.role]
    32         function(args.host, args.p)
    33 

    因为对docker技术也是刚刚入门,所以只会简单的用法。在使用scp命令实现文件传输会提示失败,

    所以我干脆使用了一个笨办法,在本机(docker:172.17.0.1)和h1(172.17.0.2)和h2(172.17.0.3)中

    都写了一遍udp_broadcast.py .

    查看效果

      本机输入: sudo python udp_broadcast.py server  ""

      h2输入  :   sudo python udp_broadcast.py server  ""

      h1输入  : sudo python udp_broadcast.py client    "<broadcast>"

    ok效果和预想的一样, h1作为客户端发送udp 广播, 本机和h2作为服务器都有收到h1发送的udp广播信息。

  • 相关阅读:
    (转载)Hadoop示例程序WordCount详解
    Eclipse打不开,闪退
    【python】实例-把两个无规则的序列连接成一个序列,并删除重复的元素,新序列按照升序排序
    【python】格式化输出
    【python】序列、元组、集合、字典和range函数
    【python】实例-判断用户输入数字的类型
    【python】文件操作
    python 异常类型----后期需理解调整
    【python】OOP编程----类的定义及封装
    【python】if&&for&&while语句
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/6247938.html
Copyright © 2011-2022 走看看