Swift开发:GCDAsyncUdpSocket 通信之UDP广播
2017-04-10 16:14
597 查看
功能需求:
发送广播,搜索设备
【在wifi下无法接收广播,原因: 路由器阻止广播】
// ViewController.swift
// 3-SwiftSocket-udp
//
// Created by 黄涛 on 17/4/10.
// Copyright © 2017年 huangtao. All rights reserved.
//
import UIKit
class ViewController:UIViewController,GCDAsyncUdpSocketDelegate {
@IBOutletweakvar btnStart:UIButton!
@IBOutletweakvar lbRecvMsg:UITextView!
var mainQueue =dispatch_get_main_queue()
var udp:GCDAsyncUdpSocket!;
let localPort:UInt16 =54321;
let boardcasePort:UInt16 =1001;
overridefunc viewDidLoad() {
super.viewDidLoad()
btnStart.addTarget(self, action:"btnStartClickFun",
forControlEvents:UIControlEvents.TouchUpInside)
udp =GCDAsyncUdpSocket(delegate:self, delegateQueue:dispatch_get_main_queue());
do
{
tryudp.enableBroadcast(true)
tryudp.bindToPort(localPort,
interface:udpError);
tryudp.beginReceiving();
}
catch{
print("catch:\(udpError)")
}
}
var udpError:String?;
func btnStartClickFun(){
//开始广播
udp.sendData("#SYSTEM\n".dataUsingEncoding(NSUTF8StringEncoding),
toHost: "255.255.255.255", port:boardcasePort, withTimeout: -1, tag:0);
}
func udpSocket(sock:GCDAsyncUdpSocket!, didReceiveData data:NSData!,
fromAddress address:NSData!, withFilterContext filterContext:AnyObject!) {
let recv:NSString =NSString(data: data, encoding:NSUTF8StringEncoding)!;
// 2 主界面ui显示数据
dispatch_async(mainQueue, {
let showStr:NSMutableString =NSMutableString()
showStr.appendString(recvasString)
showStr.appendString("\n")
self.lbRecvMsg.text = showStrasString;
})
}
func udpSocket(sock:GCDAsyncUdpSocket!, didNotConnect error:NSError!)
{
print("连接失败:\(error)")
}
func udpSocket(sock:GCDAsyncUdpSocket!, didSendDataWithTag tag:Int)
{
print("已经发送数据:\(tag)")
}
func udpSocketDidClose(sock:GCDAsyncUdpSocket!, withError error:NSError!)
{
print("断开连接 error:\(error)")
}
func udpSocket(sock:GCDAsyncUdpSocket!, didConnectToAddress address:NSData!)
{
print("开始连接")
}
overridefunc didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
发送广播,搜索设备
【在wifi下无法接收广播,原因: 路由器阻止广播】
1 使用GCDAsyncUdpSocket 实现广播
下载地址:包含tcp和udp,共4个文件 http://download.csdn.net/detail/taoerit/98095402 Swift Code:
//// ViewController.swift
// 3-SwiftSocket-udp
//
// Created by 黄涛 on 17/4/10.
// Copyright © 2017年 huangtao. All rights reserved.
//
import UIKit
class ViewController:UIViewController,GCDAsyncUdpSocketDelegate {
@IBOutletweakvar btnStart:UIButton!
@IBOutletweakvar lbRecvMsg:UITextView!
var mainQueue =dispatch_get_main_queue()
var udp:GCDAsyncUdpSocket!;
let localPort:UInt16 =54321;
let boardcasePort:UInt16 =1001;
overridefunc viewDidLoad() {
super.viewDidLoad()
btnStart.addTarget(self, action:"btnStartClickFun",
forControlEvents:UIControlEvents.TouchUpInside)
udp =GCDAsyncUdpSocket(delegate:self, delegateQueue:dispatch_get_main_queue());
do
{
tryudp.enableBroadcast(true)
tryudp.bindToPort(localPort,
interface:udpError);
tryudp.beginReceiving();
}
catch{
print("catch:\(udpError)")
}
}
var udpError:String?;
func btnStartClickFun(){
//开始广播
udp.sendData("#SYSTEM\n".dataUsingEncoding(NSUTF8StringEncoding),
toHost: "255.255.255.255", port:boardcasePort, withTimeout: -1, tag:0);
}
func udpSocket(sock:GCDAsyncUdpSocket!, didReceiveData data:NSData!,
fromAddress address:NSData!, withFilterContext filterContext:AnyObject!) {
let recv:NSString =NSString(data: data, encoding:NSUTF8StringEncoding)!;
// 2 主界面ui显示数据
dispatch_async(mainQueue, {
let showStr:NSMutableString =NSMutableString()
showStr.appendString(recvasString)
showStr.appendString("\n")
self.lbRecvMsg.text = showStrasString;
})
}
func udpSocket(sock:GCDAsyncUdpSocket!, didNotConnect error:NSError!)
{
print("连接失败:\(error)")
}
func udpSocket(sock:GCDAsyncUdpSocket!, didSendDataWithTag tag:Int)
{
print("已经发送数据:\(tag)")
}
func udpSocketDidClose(sock:GCDAsyncUdpSocket!, withError error:NSError!)
{
print("断开连接 error:\(error)")
}
func udpSocket(sock:GCDAsyncUdpSocket!, didConnectToAddress address:NSData!)
{
print("开始连接")
}
overridefunc didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
3 效果图
相关文章推荐
- Swift开发:GCDAsyncSocket通信之TCP 客户端
- Swift udp实现根据端口号监听广播数据(利用GCDAsyncUdpSocket实现)
- Swift开发:GCDAsyncSocket通信之TCP服务器
- Socket 进行UDP广播数据(GCDAsyncUdpSocket)
- Socket 进行UDP广播数据(GCDAsyncUdpSocket)
- GCDAsyncUdpSocket 发送广播包时,出现Error receiving:error code = 1
- oc下实现局域网udp广播通讯使用开源框架GCDAsyncUdpSocket
- GCDAsyncUdpSocket 收不到广播包?
- GCDAsyncUdpSocket添加数据发送超时时间
- 【IOS网络通信】socket第三方库 AsyncSocket(GCDAsyncSocket)
- 使用GCDAsyncUdpSocket&GCDAsyncSocket进行TCP连接和UDP连接
- 46.【IOS网络通信】socket第三方库 AsyncSocket(GCDAsyncSocket)
- Socket UDP通信之 AsyncUdpSocket的使用方法及二次封装
- iOS学习笔记4-GCDAsyncUdpSocket的使用(实现异步发送接收数据)
- UDP通信(android开发java语言写的)DatagramSocket
- IOS网络通信 socket第三方库 AsyncSocket(GCDAsyncSocket)
- GCDAsyncUdpSocket的使用
- linux下socket通信代码的开发及总结---UDP
- CocoaAsyncSocket使用笔记之GCDAsyncUdpSocket
- iOS开发——GCDAsyncSocket