python - 在 Swift 中接收 TCP 数据包

标签 python swift networking tcp

我想使用 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/

相关文章:

Python:UnicodeDecodeError: 'utf-8' 编解码器无法解码位置 0 的字节 0x80:无效的起始字节

ios - 以编程方式向下移动 TableView ? ( swift )

ios - 将两个单独的文件上传到具有相同名称的Firebase

ios - 无法将新项目保存到表格 View

java - ObjectOutputStream 不发送数据

python - rate_limit 不工作 celery

python - 如何在 Django/python 中每行循环三列?

python - 在 python 中编辑 CSV 文件,该文件从 python 中的另一个 json 文件读取值

node.js - centos/amazon linux/rhel 的 authbind 等价物

security - docker 中的网络设置