【发布时间】:2015-08-24 09:49:11
【问题描述】:
我正在使用这个简单的 python 服务器代码来发送缓冲区的长度 我即将发送:
def server_mode(ip, port):
try:
s = socket()
s.bind((ip, port))
print ("[*] Listening on %s:%d\n[*] Waiting for clients" % (ip, port))
if ("win32" == os.sys.platform):
print("[*] Press Ctrl + Break to stop server")
elif ("linux" in os.sys.platform):
print("[*] Press Ctrl + C to stop server")
while True:
s.listen(MAX_CLIENTS)
client, client_ip = s.accept()
client_ip = client_ip[0]
print("[*] Got connection from %s" % client_ip)
buf = struct.pack(">I", 7313)
client.send(buf)
client.close()
except KeyboardInterrupt:
s.close()
print("[*] Closed socket")
exit()
except:
s.close()
raise
然后使用这个 C 代码,客户端应该收到缓冲区的长度 我即将发送和分配缓冲区所需的位置并接收它:
char* buf = malloc(4 * sizeof(char));
recv(sockfd, buf, 4, 0);
int buf_len = *buf;
它可以工作,但只转换 4 个字节 long int 的前两个字节,
例如,如果我用它发送大小为 13 的缓冲区的len,它可以正常接收,但在像 7313 这样的数字上,它会收到 54。
【问题讨论】:
-
用python写丑陋的代码非常难,你刚刚做到了,恭喜。
-
@iharob :我认为 Stackoverflow 需要一些检测常见问题的助手作为源代码“按钮”。也许是回形针头像?
-
@MarcusMüllerꕺꕺ 任何能防止伤害我们眼睛的东西。您可以在堆栈溢出元数据上提出建议。
-
@iharob:我不会在 meta 上认真建议 Clippy -- 你知道,这是我的真名,我想在网上感到安全。
-
为什么不将大小作为 ASCII 文本字符串发送?这会简单得多。