利用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
#!/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版)的更多相关文章
- 初识Socket通信:基于TCP和UDP协议学习网络编程
学习笔记: 1.基于TCP协议的Socket网络编程: (1)Socket类构造方法:在客户端和服务器端建立连接 Socket s = new Socket(hostName,port);以主机名和端 ...
- 网络编程+Python
一.网络编程(模块:socket,from socket import *): 1. 网络层的IP地址可以唯一标识网络中的主机,传输层的"协议+端口"则可以唯一标识主机中应用程序( ...
- 《Java从入门到放弃》JavaSE入门篇:网络编程(入门版)
要进行网络编程,首先要搞清楚目的是什么. 网络编程说简单点就是在网络上的计算机进行数据的交互. 既然要进行数据交互,那就需要有一个发送方和一个接受方. 按网络上的说法,就是一个攻一个受· 当然,现阶段 ...
- 基于UDP协议的网络编程
UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象. Java使用DatagramSock ...
- 网络编程-python实现-UDP(1.1.2)
@ 目录 1.UDP是什么 2.代码实现 1.UDP是什么 Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol).UDP ...
- UDP协议的网络编程
public class UDPTest { //发送端@Testpublic void sender() throws IOException { DatagramSocket socket = n ...
- 网络编程-python实现-socket(1.1.1)
@ 目录 1.不同电脑进程之间如何通信 2.什么是socket 3.创建socket 1.不同电脑进程之间如何通信 利用ip地址 协议 端口 标识网络的进程,网络中的进程通信就可以利用这个标志与其他进 ...
- python 网络编程 代码版
写博客最怕写什么? 系统原理,框架内核... #!/usr/bin/env python # -*- coding:utf-8 -*- import socket sk = socket.socket ...
- 网络编程-python实现-TCP(1.1.3)
@ 目录 1.TCP是什么 2.代码实现 1.TCP是什么 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由I ...
随机推荐
- 【小程序分享篇 二 】web在线踢人小程序,维持用户只能在一个台电脑持登录状态
最近离职了, 突然记起来还一个小功能没做, 想想也挺简单,留下代码和思路给同事做个参考. 换工作心里挺忐忑, 对未来也充满了憧憬与担忧.(虽然已是老人, 换了N次工作了,但每次心里都和忐忑). 写写代 ...
- Scrapy框架爬虫初探——中关村在线手机参数数据爬取
关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...
- SQL Server-聚焦使用视图若干限制/建议、视图查询性能问题,你懵逼了?(二十五)
前言 上一节我们简单讲述了表表达式的4种类型,这一系列我们来讲讲使用视图的限制,简短的内容,深入的理解,Always to review the basics. 避免在视图中使用ORDER BY 上一 ...
- 免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
在生活中有一种东西几乎已经快要成为我们的另一个电子”身份证“,那就是二维码.无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码.二维码 (dimensional barcode) , ...
- 【转】java通用URL接口地址调用方式GET和POST方式
java通用URL接口地址调用方式GET和POST方式,包括建立请求和设置请求头部信息等等......... import java.io.ByteArrayOutputStream; import ...
- Docker与CI持续集成/CD
背景 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制 ...
- Android6.0运行时权限管理
自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有的权限而导致的无法安装 ...
- 编写一个通用的Makefile文件
1.1在这之前,我们需要了解程序的编译过程 a.预处理:检查语法错误,展开宏,包含头文件等 b.编译:*.c-->*.S c.汇编:*.S-->*.o d.链接:.o +库文件=*.exe ...
- SpringMVC入门
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模 ...
- Mono 3.8发布:性能进一步改进,可伸缩性提升
9月4日,Mono 3.8.0发布了.该版本的运行时带来了一些性能和可伸缩性方面的改进,同时完成了向Windows平台的移植. Mono遵循Gnome和Linux内核的版本编号策略,这意味着3.8是3 ...