使用Python实现简单UDP Ping

套接字编程作业2:UDP ping 程序 在本实验中,您将学习使用Python进行UDP套接字编程的基础知识。您将学习如何使用UDP套接字发送和接收数据报,以及如何设置适当的套接字超时。在实验中,您将熟悉Ping应用程序及其在计算统计信息(如丢包率)中的作用。 您首先需要研究一个用Python编写的简单的ping服务器程序,并实现对应的客户端程序。这些程序提供的功能类似于现代操作系统中可用的标准ping程序功能。然而,我们的程序使用更简单的UDP协议,而不是标准互联网控制消息协议(ICMP)来进行通信。 ping协议允许客户端机器发送一个数据包到远程机器,并使远程机器将数据包返回到客户(称为回显)的操作。另外,ping协议允许主机计算它到其他机器的往返时间。 以下是Ping服务器程序的完整代码。你的任务是写出Ping客户端程序。 服务器代码 以下代码完整实现了一个ping服务器。您需要在运行客户端程序之前编译并运行此代码。而且您不需要修改此代码。 在这个服务器代码中,30%的客户端的数据包会被模拟丢失。你应该仔细研究这个代码,它将帮助你编写ping客户端。 # UDPPingerServer.py # We will need the following module to generate randomized lost packets import random from socket import * import random # Create a UDP socket # Notice the use of SOCK_DGRAM for UDP packets serverSocket = socket(AF_INET, SOCK_DGRAM) # Assign IP address and port number to socket serverSocket.bind(('', 12000)) while True: # Generate random number in the range of 0 to 10 rand = random....

十一月 13, 2021 · JohnathanLin

使用Python开发一个简单的web服务器

来自书籍《计算机网络-自顶向下方法-第6版(课本)》第120页,第二章应用层的课后题第一题。 基础题目 题目:在这个编程作业中,你将用Python语言开发一个简单的Web服务器,它仅能处理一个请求。具体而言,你的Web服务器将:(1)当一个客户(浏览器)联系时创建一个连接套接字;(2)从这个连接接收HTTP请求;(3)解释该请求以确定所请求的特定文件;(4)从服务器的文件系统获得请求的文件;(5)创建一个由请求的文件组成的HTTP响应报文,报文前面有首部行;(6)经TCP连接向请求的浏览器发送响应。如果浏览器请求一个在该服务器中不存在的文件,服务器应当返回一个“404 Not Found”差错报文。 参考或者说学习了github上moranzcw的仓库:Computer-Networking-A-Top-Down-Approach-NOTES的内容,完成了这道题。 代码https://github.com/moranzcw如下: # import socket module from socket import * serverSocket = socket(AF_INET, SOCK_STREAM) # Prepare a sever socket # Fill in start # 定义ip和端口号,然后bind绑定socket host = '' port = 6789 serverSocket.bind((host, port)) serverSocket.listen(1) # Fill in end while True: # Establish the connection print('Ready to serve...') connectionSocket, addr = serverSocket.accept() # Fill in start #Fill in end try: message = connectionSocket.recv(1024) # Fill in start #Fill in end filename = message....

十一月 7, 2021 · JohnathanLin

搭建Spark实战环境(3台linux虚拟机集群)(一)样板机的搭建

系统及软件配置 系统配置 内存:16g 2400 cpu:i5 9400F 软件配置 Windows 10 1903版本 VMware workstation 15.10 CentOS centos-release-7-7.1908.0.el7.centos.x86_64 Java jdk-8u241-linux-x64.tar.gz Scala scala-2.11.8.tgz 值得一提的是,win10 1903版本与VMware 15.10之前的版本不兼容,会出现卡死(虚拟机繁忙)的问题,该问题在15.10版本解决。 资源来源于网络: VMware 15.10 链接:https://pan.baidu.com/s/1bpF3M1V3qPydQgGl-hUC1g 提取码:sb8t CentOS 7.7 链接:https://pan.baidu.com/s/1xFOlCvNrmXXwciVNOL2Pew 提取码:wxdx Java jdk-8u241-linux-x64.tar.gz 链接:https://pan.baidu.com/s/1E1TyObvyO6iQUW44lTCqDQ 提取码:6xw9 Scala scala-2.11.8.tgz 链接:https://pan.baidu.com/s/1TQB-wnffHh0i2aqzzfSi6A 提取码:iowh 安装前的准备 查看Windows下的网络配置 以Windows 10 1903为例(windows下控制台输入“winver”可以看自己windows版本),在控制面板->网络和Internet->网络连接中,可以看到本机上的网络配置。本次搭建这个集群,我们需要虚拟机和物理机(也就是windows)共用一个网络,所以需要使用桥接模式。 本人电脑联网时使用的是这个WLAN 2,它使用的网卡是Realtek 8821AE …. 的,记住这个名字。 配置VMware 虚拟网络编辑器 使用管理员权限打开VMware,菜单栏的编辑->虚拟网络适配器:将桥接模式的“桥接到”指向刚才记下的Realtek 8821AE,点击确定保存配置。 同时还要记住我WLAN 2这张网卡的网络配置信息:(windows cmd输入ipconfig查看) 集群及网络配置 根据刚才WLAN 2网络配置信息可知,我的虚拟机的网卡只能配置为192.168.3.***。 你得根据自己网卡上的网络配置去修改虚拟机网卡配置。 序号 IP地址 机器名 运行进程 核数/内存 用户名 1 192.168.3.30 master NN/SNN/DN/RM...

五月 23, 2020 · JohnathanLin

Springboot操作MongoDB,包括增改查及复杂操作

单条件查询 使用BasicDBObject配置查询条件 List<AbstractMongoEntity> list = Lists.newArrayList(); // 配置查询条件 BasicDBObject cond1 = new BasicDBObject(); cond1.append("_id", new ObjectId("5de39f20684014f1d8b8fa37")); FindIterable<Document> findIterable = // 执行查询 mongoTemplate.getCollection("crawler_cjwt").find(cond1); // 装配查询结果 MongoCursor<Document> cursor = findIterable.iterator(); Document document = null; CjwtMongoEntity question = null; while (cursor.hasNext()) { document = cursor.next(); // 使用MongoConverter可以将结果对象映射到Java Bean question = mongoConverter.read(CjwtMongoEntity.class, document); list.add(question); } System.out.println(question); cursor.close(); 返回的是一个指针,所以我们需要通过该指针遍历结果,并装进list中返回使用。 对应的mongo脚本: db.crawler_cjwt.find({'_id':new ObjectId("5de39f20684014f1d8b8fa37")}) 查询该集合所有结果 List<FgcxMongoEntity> list = Lists.newArrayList(); // find函数没有传参,即查询所有 FindIterable<Document> findIterable = crawlMongoTemplate.getCollection("fgcx").find(); MongoCursor<Document> cursor = findIterable....

五月 19, 2020 · JohnathanLin

Unison在Linux下的安装与使用

这是一篇在公司写的文档,但不涉及公司隐私。几乎所有内容参考于:https://www.cnblogs.com/welcomer/p/5068287.html 引言 编写目的 编写本文档是为了让读者快速上手使用Unison进行两台Linux服务器文件进行同步。 前景 Unison是windows和unix平台下都可以使用的双向文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。 unison 拥有其它一些同步工具或文件系统的相同特性,但也有自己的特点: 跨平台使用; 对内核和用户 权限 没有特别要求; unison 是双向的,它能自动 处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略; 只要是能连通的两台主机 ,就可以运行 unison ,可以直接使用 socket 连接或安全的 ssh 连接方式,对带宽 的要求不高,使用类似 rsync 的压缩传输协议。 Unison双向同步的一个缺点是,对于同名文件在两个同步文件夹中都被修改时,unison是不会去同步的,因为unison无法判断以那个为准。 定义 本文档介绍如何同步两台服务器,为表述方便,将第一台服务器命名为“服务器1”,操作该服务器的用户为“system1”;将第二台服务器命名为“服务器2”,操作该服务器的用户命名为“system2”。 参考资料 《使用Unison同步服务器目录》 https://www.cnblogs.com/welcomer/p/5068287.html 安装与初始化 由于在目录同步时需要跨服务器通过ssh连接,因此不建议使用root用户,建议新建普通用户进行操作。 在两台或多台服务器之间同步,只需要在第一台服务器上安装Unison,再用scp连接将可执行的unison文件复制到第二台服务器上即可。 安装Unison 由于使用源码包安装Unison需要安装Ocaml依赖,且Unison默认将文件复制到“/用户名/bin/”目录下,会导致在make install步骤时提示错误,所以建议使用apt-get或yum安装。 Ubuntu下安装:在配置好阿里云的apt-get源之后,使用sudo apt-get install unison安装。 CentoOS下安装:使用yum install unison安装。 将Unison复制到服务器2 使用apt-get或yum安装Unison后,默认放在/usr/bin/unison。 1、使用ssh连接到远程主机: scp /usr/bin/unison root@服务器2的IP地址:/root/ 注意:在Ubuntu下,如果服务器没有安装openssh-server,则无法被其他服务器连接,解决方法: 使用sudo apt-get install openssh-server安装 在/etc/ssh/sshd_config文件中,把将PermitRootLogin prohibie-password 修改为:PermitRootLogin yes 重启ssh服务即可使用。 2、登录服务器2,使用复制命令,将可执行文件unison从/root/移到/usr/bin/下。 cp /root/unison /usr/bin/ 3、在两台服务器上都输入unison –version,查看是否安装成功。如果返回了版本号,则安装成功。 [root@服务器名 ~]$ unison -version unison version 2....

二月 22, 2020 · JohnathanLin