Swift代码使用GCDAsyncSocket库建立TCP连接失败。
2015-01-11 22:43
579 查看
Swift代码使用GCDAsyncSocket库建立TCP连接失败。
先看下面Swiftl代码:
保证服务端能正常接受连接的情况下,调用connectServer时,老是连接不上,打印出信息:Attempting to connect without a delegate. Set a delegate first.
shen me gui? 代码有错吗?我没有设置代理吗?
其实代码没错,代理也在实例化对象时传了self,不解就google一下,最后在Stackoverflow找到了答案,地址:http://stackoverflow.com/questions/24824753/delegate-not-getting-set
原来是GCDAsyncSocket在Swift中使用存在的一个问题,解决方法也很简单,把GCDAsyncSocket.m这个文件第868行(你的不一定)的这句:
改为
这是什么原因当然就要去看OC的源代码才清楚,不过老外在Stackoverflow有很详细的解释(看上面给的地址),大家可以研究研究。
先看下面Swiftl代码:
class TCPSocket: GCDAsyncSocketDelegate { . . . func connectServer(host: String, port: UInt16) { tcpConn = GCDAsyncSocket(delegate: self, delegateQueue: socketQueue, socketQueue: socketQueue) if tcpConn == nil { return } errMsg: NSError? tcpConn?.connectToHost(host, onPort: port, error: &errMsg) if let err = errMsg { println("错误:\(err.localizedDescription)") //程序会在这输出:Attempting to connect without a delegate. Set a delegate first. } else { println("正在连接\(host)...") } } func socket(sock: GCDAsyncSocket!, didConnectToHost host: String!, port: UInt16) { println("连接成功!") } ... }
保证服务端能正常接受连接的情况下,调用connectServer时,老是连接不上,打印出信息:Attempting to connect without a delegate. Set a delegate first.
shen me gui? 代码有错吗?我没有设置代理吗?
其实代码没错,代理也在实例化对象时传了self,不解就google一下,最后在Stackoverflow找到了答案,地址:http://stackoverflow.com/questions/24824753/delegate-not-getting-set
原来是GCDAsyncSocket在Swift中使用存在的一个问题,解决方法也很简单,把GCDAsyncSocket.m这个文件第868行(你的不一定)的这句:
__weak id delegate;
改为
id delegate;再运行就可以成功连接了!
这是什么原因当然就要去看OC的源代码才清楚,不过老外在Stackoverflow有很详细的解释(看上面给的地址),大家可以研究研究。
相关文章推荐
- 使用GCDAsyncUdpSocket&GCDAsyncSocket进行TCP连接和UDP连接
- iOS中使用GCDAsyncSocket建立长连接
- GCDAsyncSocket TCP 建立 socket 连接
- GCDAsyncSocket类库,IOS下TCP通讯使用心得
- GCDAsyncSocket类库,IOS下TCP通讯使用心得
- 使用Socket建立网络连接TCP版
- GCDAsyncSocket类库,IOS下TCP通讯使用心得
- CocoaAsyncSocket网络通信使用之tcp连接(一)
- ios GCDAsyncSocket(Tcp)的使用
- vc socket api建立TCP连接(包括域名解析)并收发数据的代码模板
- 图说使用socket建立TCP连接
- Swift开发:GCDAsyncSocket通信之TCP服务器
- GCDAsyncSocket类库,IOS下TCP通讯使用心得
- CocoaAsyncSocket网络通信使用之tcp连接
- Swift开发:GCDAsyncSocket通信之TCP 客户端
- GCDAsyncSocket实现TCP连接怎么设置发送数据延时
- GCDAsyncSocket类库,IOS下TCP通讯使用心得
- GCDAsyncSocket类库,IOS下TCP通讯使用心得
- CocoaAsyncSocket网络通信使用之tcp连接(一)
- iOS GCDAsyncUdpSocket UDP 建立连接,实现组播