gpt4 book ai didi

python - 在 Swift 中接收 TCP 数据包

转载 作者:行者123 更新时间:2023-11-30 12:12:13 25 4
gpt4 key购买 nike

我想使用 sacpy 从服务器 (Python) 向客户端 (Swift) 发送 TCP 数据包。从服务器发送消息:

packet = IP() / TCP() / Raw()
print(CLIENT_IP, CLIENT_PORT)
packet[IP].dst = CLIENT_IP
packet[TCP].dport = CLIENT_PORT
#packet[Raw].load = str(to_text(places_list))
#print(str(to_text(places_list)))
packet[Raw].load = "HELLO WORLD"

send(packet)

swift中的代码基于:HTTP Request in Swift with POST method

在swift中接收代码:

var request = URLRequest(url: URL(string: "http://10.172.0.136:80")!)
request.httpMethod = "POST"
let postString = "x=30&y=10&name=hello"
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print("error=\(String(describing: error))")
return
}

if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(String(describing: response))")
}
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(String(describing: responseString))")
print("response = \(String(describing: response))")
}
task.resume()

服务器发出数据包,但客户端没有收到。我尝试将数据包发送到端口,消息从该端口从客户端发送到服务器。还尝试发送到端口 80 (HTTP)。在这两种情况下,错误都是:(10.172.0.136是服务器的IP)

error=Optional(Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSUnderlyingError=0x608001043330 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={_kCFStreamErrorCodeKey=-4, kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=http://10.172.0.136:80/, NSErrorFailingURLKey=http://10.172.0.136:80/, kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-4, NSLocalizedDescription=The network connection was lost.})

我认为问题出在客户端的接收上(使用 Wireshark 我发现消息被正确嗅探)。有没有简单的方法来修复我的代码?如果确实无法修复,我还能用什么方式快速接收数据包?

最佳答案

您的问题是您使用 TCP 的方式不当。您尝试在已建立的连接之外发送单个数据包,但未能指定与 HTTP 请求关联所需的任何字段。

不要为此使用 Scapy。 (除非你需要这样做来进行某种学术练习。)这对于这项工作来说是完全错误的工具。使用 HTTP 服务器——如果你想要一个简单的 Python 服务器,内置的 SimpleHTTPServer是一个合理的起点。

关于python - 在 Swift 中接收 TCP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45910824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com