level 1
王筱健time
楼主
我用 listener 监听接收端口,可以接受udp私播,但是一到udp多播的时候就只能接收一次,然后下一次就不再执行了,已经测试过了,udp 多播正常。
下面是我的代码:
//
// UDPController.swift
// OneClass
//
// Created by 2021/7/22.
//
import Foundation
import SwiftUI
import Network
let serviceIP:NWEndpoint.Host = "192.168.1.255"
let port:NWEndpoint.Port = 3004
let listenPort:NWEndpoint.Port = 4004
var connection=NWConnection(host: serviceIP, port: port, using: .udp)
var listen :NWListener?
struct UDPSendController {
func connectUDP() -> Void {
connection.start(queue: .global())
self.initUdpListen()
}
func sendUDP(_ message:String){
let contentToSend=message.data(using: String.Encoding.utf8)
connection.send(content: contentToSend, completion: NWConnection.SendCompletion.contentProcessed({(NWError) in
if NWError==nil{
print("Data was sent to UDP")
}else{
print("ERROR! Error when data (Type: Data) sending. NWError: \n \(NWError!)")
}
}))
}
func initUdpListen() -> Void {
do{
try listen = NWListener(using: .udp, on: listenPort)
listen?.stateUpdateHandler = {(newState) in
switch newState {
case .ready:
print("ready")
case .cancelled:
print("udp","listen cancelled")
case .failed:
print("udp","listen failed")
default:
break
}
}
// listen?.service = NWListener.Service.init(type: "Oneclass._udp")
listen?.newConnectionHandler = {(newConnection) in
print("\(newConnection)")
newConnection.stateUpdateHandler = {newState in
switch newState {
case .ready:
receiveUDP(on: newConnection)
case .cancelled:
print("udp","newConnectionHandler cancelled")
case .failed:
print("udp","newConnectionHandler failed")
default:
break
}
}
newConnection.start(queue: DispatchQueue(label: "UDP Server Queue"))
}
}
catch {
print("unable to create listener")
}
listen?.start(queue: .main)
}
func receiveUDP(on listenConnect: NWConnection){
listenConnect.receiveMessage { (data, context, isComplete, error) in
if let error = error {
print(error)
return
}
if let data = data, !data.isEmpty {
let backToString = String(decoding: data, as: UTF8.self)
print("\(backToString)")
}
receiveUDP(on: listenConnect)
}
}
}
跪求知道原因的大佬提供思路,感谢🙏🙏🙏
2021年07月29日 08点07分
1
下面是我的代码:
//
// UDPController.swift
// OneClass
//
// Created by 2021/7/22.
//
import Foundation
import SwiftUI
import Network
let serviceIP:NWEndpoint.Host = "192.168.1.255"
let port:NWEndpoint.Port = 3004
let listenPort:NWEndpoint.Port = 4004
var connection=NWConnection(host: serviceIP, port: port, using: .udp)
var listen :NWListener?
struct UDPSendController {
func connectUDP() -> Void {
connection.start(queue: .global())
self.initUdpListen()
}
func sendUDP(_ message:String){
let contentToSend=message.data(using: String.Encoding.utf8)
connection.send(content: contentToSend, completion: NWConnection.SendCompletion.contentProcessed({(NWError) in
if NWError==nil{
print("Data was sent to UDP")
}else{
print("ERROR! Error when data (Type: Data) sending. NWError: \n \(NWError!)")
}
}))
}
func initUdpListen() -> Void {
do{
try listen = NWListener(using: .udp, on: listenPort)
listen?.stateUpdateHandler = {(newState) in
switch newState {
case .ready:
print("ready")
case .cancelled:
print("udp","listen cancelled")
case .failed:
print("udp","listen failed")
default:
break
}
}
// listen?.service = NWListener.Service.init(type: "Oneclass._udp")
listen?.newConnectionHandler = {(newConnection) in
print("\(newConnection)")
newConnection.stateUpdateHandler = {newState in
switch newState {
case .ready:
receiveUDP(on: newConnection)
case .cancelled:
print("udp","newConnectionHandler cancelled")
case .failed:
print("udp","newConnectionHandler failed")
default:
break
}
}
newConnection.start(queue: DispatchQueue(label: "UDP Server Queue"))
}
}
catch {
print("unable to create listener")
}
listen?.start(queue: .main)
}
func receiveUDP(on listenConnect: NWConnection){
listenConnect.receiveMessage { (data, context, isComplete, error) in
if let error = error {
print(error)
return
}
if let data = data, !data.isEmpty {
let backToString = String(decoding: data, as: UTF8.self)
print("\(backToString)")
}
receiveUDP(on: listenConnect)
}
}
}
跪求知道原因的大佬提供思路,感谢🙏🙏🙏