我修改了我的问题,以回应被搁置的问题。希望这能更好地符合SO标准。在
该程序的目的是建立和发送UDP包,使用交替比特协议作为一种简单的重发机制。我已经确认可以正确地发送和接收数据包。问题是ABP钻头及其翻转。在
我现在面临的问题是,尽管尝试了多种不同的方法,但我无法翻转用于确认接收到的数据包或ack是正确编号的ABP位。我首先发送一个ABP bit=0的包,作为响应,接收进程应该看到这个并发送ABP bit=0的ack。在接收到该值后,发送方程序将其ABP位转换为1,并发送具有此ABP位值的新数据包。接收者将得到这个,发送一个ABP bit=1的匹配的ack,发送者将接收,将其位翻转回0,并继续循环,直到程序完成信息发送。在
下面的代码,很抱歉篇幅过长,但它已经完成,可以运行了。程序有四个命令行参数,下面是我一直使用的命令:
% python ftpc.py 164.107.112.71 4000 8000 manygettysburgs.txt
在哪里ftpc.py文件是发送方程序的名称,164.107.112.71是IP地址,4000和8000是端口号,以及manygettysburgs.txt是我一直在发送的文本文件。如果使用不同的.txt文件,它应该不会有什么不同,但为了完全准确,请使用长度在8000到9000个字符之间的文件。在
^{pr2}$在这段代码中,每次调用buildPacketHeader时,它都会执行flipBit作为其操作的一部分。flipBit应该为ABP翻转位的值。我将prints设置为在所有调用buildPacketHeader之后打印bit的新值,以便跟踪该值。然而,每当我运行程序时,我总是看到ABP位的相同值。在
我试过好几种方法,包括换成布尔。我尝试了一些改变:
def flipBit(val): #flip ABP bit from 0 to 1 and vice versa
if val == 0:
val = 1
else:
val = 0
return val
有些人用酒精代替:
def flipBit(val):
val = not val
return val
def flipBit(val):
val = (True, False)[val]
return val
我认为,由于过去的经验,许多方法实际上都是可行的选择。也就是说,我完全不明白为什么它在这个项目中没有像预期的那样工作。我会认为是我对python缺乏经验造成的,因为尽管现在已经使用了相当长的时间,但仍有一些特性让我无法理解。非常感谢任何帮助。在
我不明白您对pythonint的反对意见是什么,但是
ctypes
模块提供了一个低级可变对象的世界;例如这是我第一次回答我自己的问题,所以希望这是正确的。如果有人有补充或进一步的答案,那么请随时回答,或对这一点发表评论。在
最后,我通过在buildPacketHeader的return语句中添加另一个返回值来解决这个问题,这样除了返回一个字符串之外,我还返回了bit的新值。我通过在buildPacketHeader内部设置以下打印来确认其工作正常:
它的输出显示在这里(我很早就结束了,但是功能证明仍然可见)
^{pr2}$可以看出,第二分组的前面是第一分组的后面,第三分组的前面是第二分组的后面。通过这个,你可以看到程序现在正在正确地翻转位。在
对buildPacketHeader所做的更改如下所示:
变成
以及对buildPacketHeader的调用:
成为
这样的麻烦很简单。如果要更改值,请确保返回值。在
相关问题 更多 >
编程相关推荐