开源网络库 GCDAsyncSocket 笔记
来源:互联网 发布:暴躁的母亲知乎 编辑:程序博客网 时间:2024/05/23 02:02
开源网络库GCDAsyncSocket 笔记
GCDAsyncSocket地址:
使用方法:
创建:
asyncsocket = [[GCDAsyncSocket alloc]initWithDelegate:
self
delegateQueue:dispatch_get_main_queue()];
这里我们让所有的回调执行都发生在主线程的queue里,当然我们可以传一个专用的queue.
连接 :
NSError
*err=
nil
;
if
(![asyncsocketconnectToHost:@
"deusty.com"
onPort:80error:&err])
// Asynchronous!
{
//该方法异步,返回错误是因为delegate没设置等
NSLog
(@
"Igoofed: %@"
,err);
}
该方法会立刻返回,当成功连接上,delegate的
- (
void
)socket:(GCDAsyncSocket*)sender didConnectToHost:(
NSString
*)hostport:(UInt16)port
{
NSLog
(@
"Cool,I'm connected! That was easy."
);
}
有几种不同的连接方法,比如带超时的.。。。
虽然这个时候可能 socket 还没连接上,但是我们依然可以投递 读/写请求:
[asyncSocket readDataToLength:LENGTH_HEADER withTimeout:-1tag:TAG_HEADER];
这样读请求会自动进入了队列,当socket连接上后,请求会自动出队被执行。(这里假设先读一个包头,再根据长度接收包体,这个读操作完成后
当然我们可以投递多个读写操作而不必等待上一个完成.
[asyncSocket writeData:msgHeader withTimeout:-1tag:TAG_HEADER];
[asyncSocket writeData:msgBody withTimeout:-1tag:TAG_BODY];
上面的操作均为异步。下面为操作完成的委托方法:
read:
- (void)socket:(GCDAsyncSocket *)sender didReadData:(NSData *)data withTag:(long)tag{ if (tag == TAG_HEADER) { int bodyLength = [self parseHeader:data]; [socket readDataToLength:bodyLength withTimeout:-1 tag:TAG_RESPONSE_BODY]; } else if (tag == TAG_RESPONSE_BODY) { // Process the response [self handleResponseBody:data]; // Start reading the next response [socket readDataToLength:headerLength withTimeout:-1 tag:TAG_FIXED_LENGTH_HEADER]; }}
//还有另一个读方法,
// [asyncSocket readDataToData:msgSeparator withTimeout:TIMEOUT_NONE tag:TAG_CAPABILITIES];
// 读当遇到一个指定的分隔符后操作返回。比如用作 http, 因为http 每个消息都会有一个@"\r\n\r\n" 结尾标志.
//如果想跟踪进度 socket: didReadPartialDataOfLength: tag: 用这个
write:
- (
void
)socket:(GCDAsyncSocket*)sock didWriteDataWithTag:(
long
)tag
{
if
(tag==TAG_HEADER)
NSLog
(@
"TAG_HEADERrequest sent"
);
else
if
(tag==TAG_BODY)
NSLog
(@
"TAG_BODYrequest sent"
);
}
断开释放一个连接实例
[asyncSocket setDelegate:
nil
delegateQueue:
NULL
];
[asyncSocket disconnect];
[asyncSocket release];
相关的delegate 方法(回调)
socket: didConnectToHost: port:
socket: didReadData: withTag:
socket: didReadPartialDataOfLength: tag:
socket: shouldTimeoutReadWithTag: elapsed:bytesDone:
socket: didWriteDataWithTag:
socket: didWritePartialDataOfLength: tag:
socket: shouldTimeoutWriteWithTag: elapsed:bytesDone:
socketDidSecure:
socket: didAcceptNewSocket:
newSocketQueueForConnectionFromAddress:onSocket:
socketDidCloseReadStream:
socketDidDisconnect: withError:
0 0
- 开源网络库 GCDAsyncSocket 笔记
- 开源网络库 GCDAsyncSocket 笔记
- 开源网络库 GCDAsyncSocket
- java EE 笔记
- python 网络编程
- Python - 网络基础
- WebService AXIS 学习笔记
- Latex Beamer 笔记 [转】
- ACM: 网络流 图论 poj 1459
- QTP 学习笔记
- Linux Vim 笔记
- GCDAsyncSocket 笔记
-  
-
- linux 网络命令
- CentOS 网络设置
- ifconfig 网络配置
- opensuse 网络配置
- UIImageJPEGRepresentation和UIIma…
- 调用已经废弃的API消除警告
- Python GUI - Tkinter LabelFrame
- iOS关于extern、static、const的区…
- 【iOS开发】iCloud开发&nbsp…
- 开源网络库 GCDAsyncSocket 笔记
- 零基础如何学爬虫技术
- 【iOS开发】获取图片某点或…
- LeetCode 22. Generate Parentheses
- 加密你的SQLite
- iOS Grand Central Dispatch(GCD)
- iBeacon初探
- 两串旋转
- 天气预报接口api(中国天气网)