didReceiveDataが呼び出されなかった作品何も見つからなかったのです - 私はそれがOK受信サーバーにメッセージを送信するために私のメインラインのUIViewControllerで呼ばれたこの迅速なクラスをコード化しますサーバーが応答を戻したとき、didReceiveData()は決してトリガーされなかったので、クライアントはそれを受け取ることはありません。私はGCDAsyncUdpSocket上のいくつかの例を探していますが、
私はグーグルで書類を見ていて、クライアントはバインドする必要がないと言っています(サーバだけがこれを行う必要があります)。
import UIKit
import CocoaAsyncSocket
class UdpSocketSR: NSObject, GCDAsyncUdpSocketDelegate {
var socket:GCDAsyncUdpSocket!
var rc : Int = 0
var messageOut : String = ""
var messageIn : String = ""
override init(){
super.init()
}
func SetupAndSend(IP: String, PORT: Int, DATA : String) -> Int
{
socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: DispatchQueue.main)
messageOut = DATA
do {
let data = messageOut.data(using: String.Encoding.utf8)
socket.send(data!, toHost: IP, port: UInt16(PORT), withTimeout: 3, tag: 0)
try socket.beginReceiving()
sleep(3)
socket.close()
} catch {
rc = -1
}
return rc
}
private func udpSocket(sock:GCDAsyncUdpSocket!,didConnectToAddress data : NSData!){
rc = -2
}
private func udpSocket(sock: GCDAsyncUdpSocket!, didReceiveData dataRecv: NSData!, fromAddress address: NSData!, withFilterContext filterContext: AnyObject!) {
messageIn = NSString(data: dataRecv as Data, encoding: String.Encoding.utf8.rawValue) as! String
}
}
送信した直後にソケットを閉じる理由は何ですか? – WeiJay
私はsocket.close()を削除しましたが、それでもデータは受信されません - エラーはコールバック関数にあります - didReceiveではなくdidReceiveDataとしてコード化されていました。 – stran