- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我还是个学生,所以我可能漏掉了一些非常明显的东西。
所以我为此非常紧张。
但无论如何,这是我的 TFTP python 代码,它所做的只是从我们讲师的服务器下载一个文本文件。
它生成的文件如下所示: http://pastebin.com/TP8hngxM
原始文件是这样的: http://pastebin.com/xDMjkABp
如果你通过差异检查器运行它,差异很小,而且只在一个特定的地方,我真的很难弄清楚为什么会这样。
下载的文件多了几个字。
如果你有5分钟的时间,请你看看我的嵌套while循环(其他都是讲师提供的,不能更改),看看有没有问题?
最糟糕的是,我已经让它工作了,但我丢失了内存棒,我丢失了运行 100% 正常的程序的最新版本。
所以正如我所说,它只是关于嵌套的 while 循环,我不允许更改它上面的任何内容。
#!/usr/bin/python
import struct
import sys
import os
import select
import glamnetsim
from socket import *
serverHost = 'mcgreg.comp.glam.ac.uk'
serverPort = 69
timeoutSecs = 5
debugging = False
RRQ, WRQ, DATA, ACK, ERROR = range(1, 6)
codeDescriptions = {RRQ:"RRQ", WRQ:"WRQ", DATA:"DATA", ACK:"ACK", ERROR:"ERROR"}
def printf (format, *args):
print str(format) % args,
def finish ():
printf("you should see\n1e951df315d433aa4df2065a1ad31311\n")
os.system("md5sum newfile.txt")
sys.exit(0)
def sendPacket (packet, port):
global sock, debugging
global serverIp
if debugging:
for i in packet:
print ('%02x' % ord(i)),
print ''
sock.sendto(packet, (serverIp, port))
def sendReadRequest (filename, mode):
global serverPort
format = "!H%ds" % (len(filename)+1)
format += "%ds" % (len(mode)+1)
s = struct.pack(format, 1, filename, mode)
sendPacket(s, serverPort)
def sendRealAck(blockno, port):
s = struct.pack("!H", 4)
s += struct.pack("!H", blockno)
sendPacket(s, port)
def sendACK (blockno, port):
print " -> ACK:%d\n" % blockno
if blockno == 0:
sendReadRequest("the_machine_stops.txt", "octet")
else:
sendRealAck(blockno, port)
def stripPacket (s):
if len(s)>3:
code = struct.unpack("!H", s[:2])[0]
blockno = struct.unpack("!H", s[2:4])[0]
data = s[4:]
code, data = glamnetsim.simulatePossibleError (code, data)
return code,blockno,data
else:
debugPrint("corrupt packet")
return -1,-1,""
def debugPrint (s):
global debugging
if debugging:
print s
def getDesc (c):
global codeDescriptions
return codeDescriptions[c]
sock = socket(AF_INET, SOCK_DGRAM)
serverIp = gethostbyname(serverHost)
sock.setblocking(1)
sendReadRequest("the_machine_stops.txt", "netascii")
lastblock = 0
blockno = 0
port = serverPort
f = open("newfile.txt", "w")
while True:
while True:
if blockno == lastblock+1:
break
r, w, x = select.select([sock], [], [], 5.0)
if r == []:
sendACK(lastblock, port)
else:
(packet, (address, port)) = sock.recvfrom(512+4)
code, newblock, text = stripPacket(packet)
print code, blockno
if code is 3:
blockno = newblock
sendACK(blockno, port)
if code is 5:
sendACK(lastblock, port)
print "Bn: " + str(blockno) + " Lb: " + str(lastblock)
lastblock = blockno
f.write(text)
print "OK"
if len(text) < 512:
break
f.close()
finish()
最佳答案
f.write(text)
如果 blockno == lastblock+1
,该行将以过时值运行。它可能应该在内循环中。
关于python - 我简单的 tftp 客户端背后的逻辑有缺陷吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42633923/
我正在尝试用 C 语言(Windows、Visual Studio 2005)实现 TFTP 客户端。 TFTP 客户端应该连接到端口 69 上的远程 TFTP 服务器地址。 TFTP 客户端正在使用
通过 UDP 套接字实现 TFTP 客户端。首先,我创建 UDP 非阻塞套接字并执行 PUT/GET 操作,它工作正常。但是,当我再次尝试执行 GET/PUT 时,它不起作用。 RRQ/WRQ 请求本
我编写了一个简单的 tftp 服务器,它仅处理来自客户端的读取请求 (RRQ)。问题是服务器似乎没有向客户端发送数据包。我通过检查发送字节的长度与数据包大小来确保服务器没有发送数据包。 注意:我使用l
我正在使用 C++ 开发 TFTP 服务器。问题是当我使用可通过 Internet 获得的 TFTP 客户端演示 (HS TFTP) 时,我无法接收或至少在接收缓冲区中看不到任何内容。 我可以“感觉到
谁能告诉我理想的多线程 C++ TFTP 应用程序的源代码。如果它是使用 boost asio 编写的,那就更好了。 只是想了解如何使用 UDP 而不是 TCP 构建多线程 C++ 网络应用程序。 我
我需要在下载后解析文本文件流,而不使用 tftp 协议(protocol)将文本文件保存到硬盘或 sdcard。我有有效载荷中的数据。请帮忙。 struct pbuf { struct pbu
我编写了一个简单的 TFTP 服务器,它只处理读取请求 (RRQ),并且工作正常。如果在 5 秒内没有收到 ACK,服务器应该再次重新传输当前数据包。服务器还应该在放弃之前重新传输数据包 3 次。我试
我正在寻找一种使用 tftp 命令集的实现,它可以从远程服务器获取数据,但不是完全获取整个数据,而是在大小小于远程文件大小的本地环形缓冲区中获取数据,并在环被循环后覆盖数据。因此,如果任何进程在数据可
我将以下代码放在一起用于一个简单的 Ruby TFTP 服务器。它工作正常,因为它监听端口 69 并且我的 TFTP 客户端连接到它,我能够将数据包写入 test.txt,但我不只是写入数据包,我希望
维基百科 TFTP状态: Windows 2008 introduced pipelined TFTP 其目标是在高延迟链路上实现良好的吞吐量。不幸的是没有给出引用。我找到的唯一其他引用是 Bazoo
很长一段时间以来,我一直在努力在 Android 应用程序中处理 TFTP 协议(protocol)。其主要功能是从托管 TFTP 服务器的定制设计设备下载文件。 我正在浏览互联网,希望找到一些好的、
多次迭代上传文件时是否需要每次都建立连接以维持堆栈大小? 我收到 calloc 失败错误。 我正在使用带有多线程的 freertos。 最佳答案 根据Wikipedia是的,TFTP 不允许为多个文件
我创建了一个简单的 tftp 服务器,仅处理读取请求 (RRQ)。一切都工作正常,直到我开始制作服务器的多线程版本。在应用程序中,我只是在主线程中接收请求,然后将请求转发到执行数据包分析的新线程。因此
我正在编写自己的 TFTP 客户端。客户端是用 c++(部分是 c)编写的,并在 unix 系统(Linux Debian 稳定版)上运行。 这是我的问题: 我可以将我的读取请求 (RRQ) 发送到
我有 BusyBox v1.23.2 多调用二进制文件。 带有简单的 tftp 客户端。我需要检查与 tftp 服务器的连接以及那里文件的可访问性。对于 ftp,它可能如下所示: if wget -q
我正致力于实现 TFTP 客户端(UDP 套接字)。 目前我必须关闭我的 Windows 8 机器上的整个防火墙,否则数据无法到达 TFTP 客户端。传出连接请求发生在端口 69 上,但来自 TFTP
我还是个学生,所以我可能漏掉了一些非常明显的东西。 所以我为此非常紧张。 但无论如何,这是我的 TFTP python 代码,它所做的只是从我们讲师的服务器下载一个文本文件。 它生成的文件如下所示:
我正在使用 tftp 使用 Windows 10 上的 ubuntu 子系统将文件上传到我的电脑上的 tftp 服务器。 当我输入这样的命令时: tftp -m binary 192.168.1.16
我有一个 C 代码库,可以解析网络数据包,它似乎可以很好地处理 UDP。 TFTP(的第一个数据包)除外。 Ubuntu tftp 客户端(实际上是 BSD netkit TFTP 客户端)在这方面有
我正在用 C 语言编写一个 tftp 服务器,并在终端上使用 tftp 命令对其进行测试。然而,大多数时候,当我尝试发送 RRQ 时,我会收到类似以下内容的信息: tftp> get a.txt se
我是一名优秀的程序员,十分优秀!