【发布时间】:2017-01-19 10:47:00
【问题描述】:
我有一个应用程序需要使用 UDP 与另一台设备通信。
我正在使用GCDAsyncUDPSocket 框架。
在我第一次在端口 14550 上接收之前,我不知道它需要发回的端口。
为了解决这个问题,我实现了 2 个不同的套接字,一个发送套接字和一个接收套接字。
首先我初始化两个套接字并在接收套接字上打开端口 14550。
func wifiConnect() {
receiveSocket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue())
transmitSocket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue())
do {
try receiveSocket!.bindToPort(14550)
try transmitSocket!.enableBroadcast(true)
try receiveSocket!.beginReceiving()
} catch _ as NSError { print("Issue with setting up listener") }
}
然后我等到该端口上接收到数据,然后连接到发送套接字的发送者地址。
func udpSocket(sock: GCDAsyncUdpSocket, didReceiveData data: NSData, fromAddress address: NSData, withFilterContext filterContext: AnyObject?) {
if !udpConneced {
do {
try transmitSocket?.connectToAddress(address)
} catch let error {
NSLog("Error connecting to address. %@",String(error))
return
}
}
dataReceived(data)
}
连接后,udpConnected 设置为 true 并运行函数。
func udpSocket(sock: GCDAsyncUdpSocket, didConnectToAddress address: NSData) {
udpConnected = true
didConnect()
}
但是,有时整个应用程序会崩溃并出现此错误
NSURLConnection finished with error - code -1002
我理解这是一个无效的 URL,但是我自己没有将任何 URL 传递给任何一个套接字。
是什么导致了这个问题?我知道连接设备的 IP,所以我应该使用它来连接传输套接字吗?
谢谢!
【问题讨论】:
-
请不要在您的问题中包含答案。如果您自己解决了问题,您可以发布自己的答案。谢谢。
标签: ios swift networking udp gcdasyncsocket