CAsysncSocket 之--tcp工具--AsyncSocket 用法

============================================================
博文原创,转载请声明出处
电子咖啡(原id蓝岩)
============================================================
详解iPhone 下AsyncSocket网络库编程是本文要介绍的内容,iphone的标准推荐CFNetwork C库编程.但是编程比较烦躁。在其它OS往往用类来封装的对Socket函数的处理。比如MFC的CAsysncSocket.在iphone也有类似于开源项目.cocoa AsyncSocket库

官方网站:http://code.google.com/p/cocoaasyncsocket/

这里只上例子,自己在项目中使用的,绝对能使用,如果有疑问,欢迎留言讨论。

----------------

注意,CAsysncSocket已经将tcp、udp的连接异步化处理,所以你只管在主线程调用即可


将AsyncSocket.h AsyncSocket.m 导入到你的工程中,

在自己建立的util中,加入一下代码

#pragma mark tcp
- (void) connectToHost:(NSString*)host port:(int)port {
    socket = [[AsyncSocket alloc] initWithDelegate:self]; //设置回调的delegate
    //TODO 这里需要在退出局域网模式下断开
    [socket disconnect];    //断开tcp连接
//    socket
    NSLog(@"tcp connecting to host:%@,port:%d",host,port);
    @try {
        [socket connectToHost:host onPort:port error:nil];
        [socket readDataWithTimeout:-1 tag:1]; //这只超时,如果timeout为负数,则永远不超时
    }
    @catch (NSException *exception) { //异常处理
        NSLog(@"connect exception %@,%@", [exception name], [exception description]);
    }
}
//相应的回调函数
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{
    NSLog(@"did connect to host %@:%d", host, port);
}
- (void)sendMessage:(NSString*)msg {
    NSLog(@"tcp send msg:%@",  msg);
    [socket readDataWithTimeout:SOCKET_TIMEOUT tag:1];
    [socket writeData:[msg dataUsingEncoding:NSUTF8StringEncoding] withTimeout:SOCKET_TIMEOUT tag:1];
}
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
    NSString* message = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]autorelease];
    NSLog(@"%f receive ReadData is: %@",[[NSDate date] timeIntervalSince1970],message);
   
}
-(NSTimeInterval)onSocket:(AsyncSocket *)sock shouldTimeoutReadWithTag:(long)tag elapsed:(NSTimeInterval)elapsed bytesDone:(NSUInteger)length{
    NSLog(@"onSocket:shouldTimeout-ReadWithTag:-----------");
    return 0;
}
-(NSTimeInterval)onSocket:(AsyncSocket *)sock shouldTimeoutWriteWithTag:(long)tag elapsed:(NSTimeInterval)elapsed bytesDone:(NSUInteger)length{
    NSLog(@"onSocket:shouldTimeout-WriteWithTag:-----------");
    return 0;
}

-(void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag{
    NSLog(@"didWriteDataWithTag tag:%ld",tag);
}
-(void)onSocketDidDisconnect:(AsyncSocket *)sock{
    NSLog(@"onSocketDidDisconnect sock:%@",sock);
    [viewController onLocalDisconnect:0];
    
}

ok,试试吧
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值