我正在使用SocketServer模块作为TCP服务器.我在这里遇到了一些问题recv(),因为传入的数据包总是有不同的大小,所以如果我指定recv(1024)(我尝试使用更大的值,更小),它会在2或3个请求后被卡住,因为数据包长度将会更小(我认为),然后服务器卡住,直到超时.
class Test(SocketServer.BaseRequestHandler):
def handle(self):
print "From:", self.client_address
while True:
data = self.request.recv(1024)
if not data: break
if data[4] == "\x20":
self.request.sendall("hello")
if data[4] == "\x21":
self.request.sendall("bye")
else:
print "unknow packet"
self.request.close()
print "Disconnected", self.client_address
launch = SocketServer.ThreadingTCPServer(('', int(sys.argv[1])),Test)
launch.allow_reuse_address= True;
launch.serve_forever()
Run Code Online (Sandbox Code Playgroud)
如果客户端通过相同的源端口发送多个请求,但服务器卡住,任何帮助将非常感谢,谢谢!
我想计算我想发送的UDP报头数据包的校验和:
packetosend = """60 00 00 00 00 24 3a 40 20 02 c0 a8 01 50 00 01 00 00
00 00 00 00 09 38 20 02 c0 a8 01 50 00 01 00 00 00 00 00 00 09 6f"""
Run Code Online (Sandbox Code Playgroud)
所以我需要加入这个utf-16(不是问题)并计算这个特定数据包的校验和.我怎样才能做到这一点?
谢谢!
编辑:是的它是ICMPv6数据包的IPv6标头,无论如何我想知道的是公式,以及它是如何工作的.
我将给出一个ICMP ping echo(v4)数据包的另一个例子:
packet = """
08 00 d1 15 76 0c 00 07 bf d3 55 4a ad b5 03 00 // "d1 15" is the packet checksum
08 09 0a …Run Code Online (Sandbox Code Playgroud) 我在python中构建服务器,我需要将十进制值转换为十六进制,如下所示:
假设数据包以4个字节开始,定义数据包长度:00 00 00 00如果len(数据包)= 255,我们将发送:00 00 00 ff
现在我的问题是有时数据包大于256,例如336,那么它将是:00 00 01 50
我不知道如何在python中做到这一点,我将非常感谢任何帮助.谢谢 !
我想从这样的字符串中删除一个字符:
string = "ASDFVGHFJHRSFDZFDJKUYTRDSEADFDHDS"
print len(string)
Run Code Online (Sandbox Code Playgroud)
(33)
所以我想在这个字符串中删除一个随机字符,然后有一个len = 32这是最好的方法吗?
编辑:谢谢你的答案,但我忘记了一些事情:我想打印删除的字符; 使用Anurag Uniyal技术?
谢谢 !
我想删除字符串中的一个空字节,有时用另一个字符替换它.像那样 :
string ="41 00 36 00 36 00 00 00 57 00 46 00 42 00 41 00 61 00 62 00 73 00 20 00 36 00"
我正在考虑使用随机和替换,但替换总是从第一个开始:
replace("00","B",1)
Run Code Online (Sandbox Code Playgroud)
所以这不是随机的.
任何帮助将不胜感激 !
编辑:我的意思是零到00,我犯了一个错误:
string ="41 00 36 00 36 00 00 00 57 00 46 00 42 00 41 00 61 00 62 00 73 00 20 00 36 00"
谢谢