在Swift中接收TCP数据包

时间:2017-08-28 01:42:15

标签: 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 =可选(错误域= NSURLErrorDomain代码= -1005"网络连接丢失。" UserInfo = {NSUnderlyingError = 0x608001043330 {错误域= kCFErrorDomainCFNetwork代码= -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 =网络连接是丢失。})

我认为,问题出在客户端的接收中(使用Wireshark我看到消息被正确嗅探)。 有没有一种简单的方法来修复我的代码?如果它真的无法修复,我可以用什么方式在swift中接收数据包?

1 个答案:

答案 0 :(得分:0)

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

不要使用Scapy。 (除非你被要求进行某种学术练习。)这完全是错误的工具。使用HTTP服务器 - 如果你想在Python中使用一个简单的服务器,内置SimpleHTTPServer是一个合理的起点。