IOS使用AsyncSocket进行Socket通信
首先导入CFNetwork.framework框架
1、下载ASyncSocket库源码
2、把ASyncSocket库源码加入项目
3、在项目增加CFNetwork框架
使用AsyncSocket开源的框架可以很方便的与其它系统进行Socket通信, AsyncSocket包括TCP和UDP,
通过实现委托AsyncSocketDelegate进行交互。AsyncSocketDelegate有如下消息调用。
@implementation SocketComm //初始话,创建socket
- (id) init
{
self = [super init];
if (self != nil) {
_sock = [[AsyncSocket alloc] initWithDelegate:self];
[_sock setRunLoopModes:[NSArray arrayWithObject:NSRunLoopCommonModes]]; }
return self; }
即将连接及发生错误会调用willDisconnectWithError
- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err{ [_asyncSocket release]; _asyncSocket = nil; }
其它方法调用:
1 - (void)onSocketDidDisconnect:(AsyncSocket *)sock;
//收到新的socket连接时调用
- (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket; - (NSRunLoop *)onSocket:(AsyncSocket *)sock wantsRunLoopForNewSocket:(AsyncSocket *)newSocket; - (BOOL)onSocketWillConnect:(AsyncSocket *)sock;
网络连接成功后,调用didConnectToHost, 收发数据中必须添加 [sock readDataWithTimeout:-1 tag:0];否则接收不到数据,
并且这个函数在数据返回就必须调用一次,让他一直循环下去
//异步返回的连接成功
1 - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
2 { [sock readDataWithTimeout:- tag:]; }
//读取客户端发送来的信息
1 - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{ NSString *msg = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; if(msg)
{ //处理受到的数据 }
else
{ NSLog(@"Error converting received data into UTF-8 String"); } [sock readDataWithTimeout:- tag:]; }
- (void)onSocket:(AsyncSocket *)sock didReadPartialDataOfLength:(NSUInteger)partialLength tag:(long)tag; - (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag; - (void)onSocket:(AsyncSocket *)sock didWritePartialDataOfLength:(NSUInteger)partialLength tag:(long)tag; - (NSTimeInterval)onSocket:(AsyncSocket *)sock shouldTimeoutReadWithTag:(long)tag
elapsed:(NSTimeInterval)elapsed bytesDone:(NSUInteger)length; - (NSTimeInterval)onSocket:(AsyncSocket *)sock shouldTimeoutWriteWithTag:(long)tag
elapsed:(NSTimeInterval)elapsed
bytesDone:(NSUInteger)length; - (void)onSocketDidSecure:(AsyncSocket *)sock;
AsyncSocket包括connectToHost,writeData,readDataWithTimeout等基本调用,发送这些消息,会触发相应Delegate相应的方法。
IOS使用AsyncSocket进行Socket通信的更多相关文章
- IOS 基于TCP的socket通信详解(原创)
最近在整理通信层相关知识,这篇文章是边整理边写的,有些地方可能不够准确,还请各位路过的大牛专家指出来.这次整理的socket通信是基于TCP的,实现方式是GCD形式,以下记录的都是些理论知识,方便自己 ...
- IOS使用Asyncsocket进行socket编程
iphone的标准推荐CFNetwork C库编程.但是编程比较烦躁.在其它OS往往用类来封装的对Socket函数的处理.比如MFC的CAsysncSocket.在iphone也有类似于开源项目.co ...
- iOS:socket通信
ios开发 Socket通信 Socket描述了一个IP.端口对.它简化了程序员的操作,知道对方的IP以及PORT就可以给对方发送消息,再由服务器端来处理发送的这些消息.所以,Socket一定包含了通 ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- iOS 网络编程:socket
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- iOS网络编程笔记——Socket编程
一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是T ...
- [深入浅出Cocoa]iOS网络编程之Socket
http://blog.csdn.net/kesalin/article/details/8798039 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] [深入浅出Co ...
- 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?
这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...
- php简单实现socket通信
socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...
随机推荐
- 43.可变参数实现printf
#include <stdio.h> #include <stdio.h> #include <Windows.h> #include <stdarg.h&g ...
- diff---比较文件不同
diff命令在最简单的情况下,比较给定的两个文件的不同.如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入.diff命令是以逐行的方式,比较文本文件的异同处.如果该命令指定进行目录的比较,则 ...
- nginx配置静态文件服务器的一个特殊需求的探索和分享, nginx处理不同路径返回统一文件,nginx改写,跳转请求.
最近在做一个前后端分离的个人博客,在做自己博客的时候有个想法,本来是打算用nginx作为静态文件服务器使用,django做后端程序. 我的前端页面用vue写的,结果用组件用嗨了,发现页面列表和 详情都 ...
- local-语言切换监听事件
今天在更改时钟的问题的时候,需要监听语言切换来刷新时钟的显示.记录下监听方法 //注册监听事件 intentFilter.addAction(Intent.ACTION_LOCALE_CHANGED) ...
- 【hdu 4333】Revolving Digits
[链接]http://acm.hdu.edu.cn/showproblem.php?pid=4333 [题意] 就是给你一个数字,然后把最后一个数字放到最前面去,经过几次变换后又回到原数字,问在这些数 ...
- 重排序列 & 拓扑排序
http://bookshadow.com/weblog/2016/10/30/leetcode-sequence-reconstruction/ 这道题目,检查重排的序列是否一致. 用了拓扑排序. ...
- Spark MLlib LDA 源代码解析
1.Spark MLlib LDA源代码解析 http://blog.csdn.net/sunbow0 Spark MLlib LDA 应该算是比較难理解的,当中涉及到大量的概率与统计的相关知识,并且 ...
- 目标跟踪系列十一:Exploiting the Circulant Structure of Tracking-by-detection with Kernels代码思路
Tracking学习系列原创,转载标明出处: http://blog.csdn.net/ikerpeng/article/details/40144497 这篇文章非常赞啊!非常有必要将其好好的学习, ...
- 深度学习 Deep Learning UFLDL 最新Tutorial 学习笔记 3:Vectorization
1 Vectorization 简述 Vectorization 翻译过来就是向量化,各简单的理解就是实现矩阵计算. 为什么MATLAB叫MATLAB?大概就是Matrix Lab,最根本的差别于其它 ...
- 早该知道的 7 个JavaScript 技巧[转]
简洁写法 对象的简写在过去,如果你想创建一个对象,你需要这样: var car = new Object(); car.colour = 'red'; car.wheels = 4; car.h ...