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

 #!/usr/bin/env python3
# UDP client and server for broadcast messages on a local LAN import argparse, socket BUFSIZE = 65535 def server(interface, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.bind((interface, port))
print('Listening for datagrams at {}'.format(sock.getsockname()))
while True:
data, address = sock.recvfrom(BUFSIZE)
text = data.decode('ascii')
print('The client at {} says {}'.format(address, text)) def client(network, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
text = 'Broadcast datagram!'
sock.sendto(text.encode('ascii'), (network, port)) if __name__=='__main__':
choices = {'client':client, 'server':server}
parser = argparse.ArgumentParser(description='Send and receive UDP broadcast.')
parser.add_argument('role', choices=choices, help='which role to play.')
parser.add_argument('host', help='interface the server listen at network the client sends to')
parser.add_argument('-p', metavar='POST', type=int, default=1060, help='UDP port(default 1060)')
args = parser.parse_args()
function = choices[args.role]
function(args.host, args.p)

因为对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广播信息。

利用Docker技术实现UDP广播效果(网络编程python版)的更多相关文章

  1. 初识Socket通信:基于TCP和UDP协议学习网络编程

    学习笔记: 1.基于TCP协议的Socket网络编程: (1)Socket类构造方法:在客户端和服务器端建立连接 Socket s = new Socket(hostName,port);以主机名和端 ...

  2. 网络编程+Python

    一.网络编程(模块:socket,from socket import *): 1. 网络层的IP地址可以唯一标识网络中的主机,传输层的"协议+端口"则可以唯一标识主机中应用程序( ...

  3. 《Java从入门到放弃》JavaSE入门篇:网络编程(入门版)

    要进行网络编程,首先要搞清楚目的是什么. 网络编程说简单点就是在网络上的计算机进行数据的交互. 既然要进行数据交互,那就需要有一个发送方和一个接受方. 按网络上的说法,就是一个攻一个受· 当然,现阶段 ...

  4. 基于UDP协议的网络编程

    UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象. Java使用DatagramSock ...

  5. 网络编程-python实现-UDP(1.1.2)

    @ 目录 1.UDP是什么 2.代码实现 1.UDP是什么 Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol).UDP ...

  6. UDP协议的网络编程

    public class UDPTest { //发送端@Testpublic void sender() throws IOException { DatagramSocket socket = n ...

  7. 网络编程-python实现-socket(1.1.1)

    @ 目录 1.不同电脑进程之间如何通信 2.什么是socket 3.创建socket 1.不同电脑进程之间如何通信 利用ip地址 协议 端口 标识网络的进程,网络中的进程通信就可以利用这个标志与其他进 ...

  8. python 网络编程 代码版

    写博客最怕写什么? 系统原理,框架内核... #!/usr/bin/env python # -*- coding:utf-8 -*- import socket sk = socket.socket ...

  9. 网络编程-python实现-TCP(1.1.3)

    @ 目录 1.TCP是什么 2.代码实现 1.TCP是什么 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由I ...

随机推荐

  1. mobx @computed的解读

    写在前面:我一开始看不懂官网的@computed的作用,因为即使我把@computed去掉,依然能正确的report,然后我百度谷歌都找不到答案,下面都是我自己的理解,如果是有问题的,不对的,请务必留 ...

  2. Linux中进行单文件内容的复制

    文件内容复制的常规方法: 开辟一段空间,不断读取文件的内容并写入另一文件当中,这种方法好在安全,一般在类型允许的最大范围内是安全的,缺点就是复制内容的时间长 一次性复制文件的内容,这种方法必须首先获取 ...

  3. [C#] C# 知识回顾 - 异常介绍

    异常介绍 我们平时在写程序时,无意中(或技术不够),而导致程序运行时出现意外(或异常),对于这个问题, C# 有专门的异常处理程序. 异常处理所涉及到的关键字有 try.catch 和 finally ...

  4. Velocity初探小结--Velocity在spring中的配置和使用

    最近正在做的项目前端使用了Velocity进行View层的数据渲染,之前没有接触过,草草过了一遍,就上手开始写,现在又回头细致的看了一遍,做个笔记. velocity是一种基于java的模板引擎技术, ...

  5. Chrome V8引擎系列随笔 (1):Math.Random()函数概览

    先让大家来看一幅图,这幅图是V8引擎4.7版本和4.9版本Math.Random()函数的值的分布图,我可以这么理解 .从下图中,也许你会认为这是个二维码?其实这幅图告诉我们一个道理,第二张图的点的分 ...

  6. JSP 标准标签库(JSTL)

    JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...

  7. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  8. Android local.properties 文件读取

    转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/6202369.html 本文出自[赵彦军的博客] 在Android Studio项目里面有个local.pro ...

  9. Mysql - 存储过程/自定义函数

    在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...

  10. BZOJ 1146: [CTSC2008]网络管理Network [树上带修改主席树]

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3522  Solved: 1041[Submi ...