背景:
我希望能够在我的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来说还是很新的。我来自Android背景,那里有BroadcastReceiver,即使该应用未运行,它也可以将位置信息传递给服务。 所以我在iOS / Swift中寻找类似的东西,看来以前不可能,但现在可能会。我正在为iOS 10开发,但是如果它向后兼容,那就太好了。 我发现 我可以执行此操作以开始提供位置更新,尽管这会引起一些问题。一旦我打电话给我并且我的应用程序没有运
我从Android获得.ovpn文件,我有用户名和密码,我应该连接到vpn服务器,但我不确定如何做到这一点。我试过这样的东西: 我不知道如何添加证书(in.ovpn)信息以及如何设置它。ovpn如下所示(我只是删除标记中的数据并更改服务器地址: 谢谢你的帮助
当我试着检查我的iPhone上的互联网连接时,我得到了一堆错误。有谁能帮我修好这个吗? 代码: 代码中的错误: 如果无法读取,则错误1表示: “int”不能转换为“scNetworkReachabilityFlags” 错误2&3: 找不到接受所提供参数的“init”的重载
问题内容: 这是代码,但出现错误: 可以从插座接收使用吗? 问题答案: 不。当您有字节数组时,要使用该数组,并且要像文件一样从数组中读取,就可以使用。如果只想从套接字读取字节数组,请执行以下操作: 该变量将包含实际读取的字节数,并且数据当然将在array中。
我在将JSON从我的前端发送到后端并在那里读取时遇到了一点问题。首先是简单的部分,在我的< code>index.html中,我读取一些字段中写的内容,并将其传递给< code>var inputs “console.log(”input:“JSON.stringify(inputs)”输出到控制台: 输入:{"T_0":"3","E_A":"5"} 这调用函数backend_test该函数应该接
当应用程序关闭时,我无法使通知工作。 我从FCM/GCM(python服务器)发送此消息: 所以curl是这样的: curl-头"授权:key=MYKEY"-头"内容类型:应用/json"https://fcm.googleapis.com/fcm/send-d'{"registration_ids":["APA91bEDB9dVf-..."],"collapse_key":空,"content_