【发布时间】:2021-03-06 05:26:29
【问题描述】:
Error Domain=NSPOSIXErrorDomain Code=48 "地址已在使用" bind() 函数中的错误
【问题讨论】:
Error Domain=NSPOSIXErrorDomain Code=48 "地址已在使用" bind() 函数中的错误
【问题讨论】:
class DeviceScanning:NSObject,GCDAsyncUdpSocketDelegate{
var address = "255.255.255.255"
var port:UInt16 = 5593
var socket:GCDAsyncUdpSocket!
var socketReceive:GCDAsyncUdpSocket!
var error : NSError?
override init() {
}
func broadcastNearByDevices(){
let jsnStr = "{\"cmd\":\"ping\"}"
let message = jsnStr.data(using: String.Encoding.utf8)
socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: DispatchQueue.main)
do {
try socket.enableReusePort(true)
try socket.bind(toPort: port)
try socket.enableBroadcast(true)
try socket.beginReceiving()
socket.send(message!, toHost: address, port: port, withTimeout: -1, tag: 0)
} catch {
stopBroadcasting()
print(error)
//delegate?.broadcastData(ipAddress: error.localizedDescription)
}
}
func stopBroadcasting(){
socket?.close()
}
private func udpSocket(sock: GCDAsyncUdpSocket!, didConnectToAddress address: NSData!) {
print("didConnectToAddress");
}
private func udpSocket(sock: GCDAsyncUdpSocket!, didNotConnect error: NSError!) {
print("didNotConnect \(error)")
}
func udpSocket(_ sock: GCDAsyncUdpSocket!, didSendDataWithTag tag: Int) {
print("didSendDataWithTag")
}
private func udpSocket(sock: GCDAsyncUdpSocket!, didNotSendDataWithTag tag: Int, dueToError error: NSError!) {
print("didNotSendDataWithTag")
}
func udpSocket(_ sock: GCDAsyncUdpSocket, didReceive data: Data, fromAddress address: Data,withFilterContext filterContext: Any?) {
//smartDevicesArr.removeAll()
var host: NSString?
var port1: UInt16 = 0
GCDAsyncUdpSocket.getHost(&host, port: &port1, fromAddress: address as Data)
print("From",data)
let gotdata: NSString = NSString(data: data as Data as Data, encoding: String.Encoding.utf8.rawValue)!
print("gotdata",gotdata)
if let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String:Any] {
print("JSON Response is",json)
}
}
}
【讨论】: