Swift:使用GCDAsyncUdpSocket接收UDP

背景:

我希望能够在我的iOS应用程序和服务器之间发送和接收UDP数据包。服务器将所有传入消息回显给应用程序客户端。

。我有一个StartViewController,它启动了两个实现GCDAsyncUdpSocketDelegate的类,一个用于发送,一个用于接收。“发送套接字”正在工作,服务器接收到消息。

问题:

在发送后,该应用程序再也不会取回传入的消息。监听套接字设置有些问题,因为didReceiveData永远不会被调用。

我做错了吗?

开始:

class StartViewController: UIViewController {

var inSocket : InSocket!

var outSocket : OutSocket!

override func viewDidLoad() {

super.viewDidLoad()

inSocket = InSocket()

outSocket = OutSocket()

}

@IBAction func goButton(sender: UIButton) {

outSocket.send("This is a message!")

}

}

接收:

class InSocket: NSObject, GCDAsyncUdpSocketDelegate {

let IP = "255.255.255.255"

let PORT:UInt16 = 5556

var socket:GCDAsyncUdpSocket!

override init(){

super.init()

setupConnection()

}

func setupConnection(){

var error : NSError?

socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue())

socket.bindToPort(PORT, error: &error)

socket.enableBroadcast(true, error: &error)

socket.joinMulticastGroup(IP, error: &error)

socket.beginReceiving(&error)

}

func udpSocket(sock: GCDAsyncUdpSocket!, didReceiveData data: NSData!, fromAddress address: NSData!, withFilterContext filterContext: AnyObject!) {

println("incoming message: \(data)");

}

}

发送:

class OutSocket: NSObject, GCDAsyncUdpSocketDelegate {

let IP = "90.112.76.180"

let PORT:UInt16 = 5556

var socket:GCDAsyncUdpSocket!

override init(){

super.init()

setupConnection()

}

func setupConnection(){

var error : NSError?

socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue())

socket.connectToHost(IP, onPort: PORT, error: &error)

}

func send(message:String){

let data = message.dataUsingEncoding(NSUTF8StringEncoding)

socket.sendData(data, withTimeout: 2, tag: 0)

}

func udpSocket(sock: GCDAsyncUdpSocket!, didConnectToAddress address: NSData!) {

println("didConnectToAddress");

}

func udpSocket(sock: GCDAsyncUdpSocket!, didNotConnect error: NSError!) {

println("didNotConnect \(error)")

}

func udpSocket(sock: GCDAsyncUdpSocket!, didSendDataWithTag tag: Int) {

println("didSendDataWithTag")

}

func udpSocket(sock: GCDAsyncUdpSocket!, didNotSendDataWithTag tag: Int, dueToError error: NSError!) {

println("didNotSendDataWithTag")

}

}

添加了被遗忘的代码行。

回答:

我终于可以使用此套接字设置了:

func setupConnection(){

var error : NSError?

socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue())

socket.bindToPort(PORT, error: &error)

socket.connectToHost(SERVER_IP, onPort: PORT, error: &error)

socket.beginReceiving(&error)

send("ping")

}

func send(message:String){

let data = message.dataUsingEncoding(NSUTF8StringEncoding)

socket.sendData(data, withTimeout: 2, tag: 0)

}

以上是 Swift:使用GCDAsyncUdpSocket接收UDP 的全部内容, 来源链接: utcz.com/qa/407936.html

回到顶部