很多同学一听到Socket TCP UDP 这几个字眼感觉特别害怕,很怕在工作当中使用,因为他们太底层了.下面我把我在工作中使用Socket类库GCDAsyncSocket进行一次实战

文章中只适用于小型数据传输, 如果比较到,例如音频文件的话,请自行拼接data.

首先向工程导入GCDAsyncSocket.h/GCDAsyncSocket.m

下载地址:链接:http://pan.baidu.com/s/1c1bHytM密码: p22g

然后创建一个单例类Client 继承于NSObject

Client.h 文件内容如下

#import <Foundation/Foundation.h>

typedef void(^BLOCK)(idresult);

@interface RCClient : NSObject

+ (Client *)shareInstance;

- (void)sendMessage:(NSString *)strcomplete:(BLOCK)block;

@end

Client.m 文件内容如下:

#import "Client.h"

#import "GCDAsyncSocket.h"

// TCP连接

@interface Client ()

@property (nonatomic,strong)GCDAsyncSocket *socket;

@property (nonatomic,copy)BLOCK block;

@property (nonatomic,assign)NSInteger counter;

#define IP @"192.168.1.100"

#define PORT 5555

@end

@implementationClient

- (instancetype)init

{

self = [superinit];

if (self) {

[selfcreateConnection];

}

returnself;

}

+ (Client *)shareInstance {

staticClient *client =nil;

staticdispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

client = [[Clientalloc]init];

});

return client;

}

#pragma mark - 建立连接

- (void)createConnection {

self.socket = [[GCDAsyncSocketalloc]initWithDelegate:selfdelegateQueue:dispatch_get_main_queue()];

// 连接

NSError *error =nil;

[self.socketconnectToHost:IPonPort:PORTerror:&error];

if(error) {

NSLog(@"连接错误%@", error);

return;

}

[self.socketreadDataWithTimeout:-1tag:0];

}

// 发送数据

- (void)sendMessage:(NSString *)str tag:(NSInteger)tag complete:(BLOCK)block {

self.block = block;

[self.socketwriteData:[strdataUsingEncoding:NSUTF8StringEncoding]withTimeout:-1tag:0];

[self.socket readDataWithTimeout:-1 tag:0];

}

// tcp连接

- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port {

NSLog(@"连接成功");

[self.socketreadDataWithTimeout:-1tag:0];

}

- (void)disconnection {

[self.socketdisconnect];

[self.socketreadDataWithTimeout:-1tag:0];

}

// 服务器返回数据

- (void)socket:(GCDAsyncSocket*)sock didReadData:(NSData *)data withTag:(long)tag {

NSString *str = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];

NSLog(@"str = %@", result);

self.block(result);

[self.socketreadDataWithTimeout:-1tag:0];

}

- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err {

NSLog(@"已经断开连接!");

[self.socketreadDataWithTimeout:-1tag:0];

}

@end

转自:http://blog.5ibc.net/p/32842.html

iOS Socket/Tcp编程 GCDAsyncSocket的实战(带回调)的更多相关文章

  1. Linux C Socket TCP编程介绍及实例

    转自:https://blog.csdn.net/lell3538/article/details/53335231 { printf("向服务器发送数据:%s\n",sendbu ...

  2. Socket - TCP编程

    Socket是网络编程的一个抽象概念. 通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可 socket参数及常用功能 ...

  3. iOS socket TCP UDP

    TCP: 服务器: #import <Foundation/Foundation.h> #include <sys/socket.h> #include <netinet ...

  4. java Socket(TCP)编程小项目

    package 服务器端相关操作; import java.io.Serializable; /* * 创建存储需要传输信息的对象,方便客户端向服务器端传送数据 */ public class Cli ...

  5. Java Socket TCP编程(Server端多线程处理)

    package com; import java.io.*; import java.net.Socket; /** * Socket Client * <p> * Created by ...

  6. Java Socket TCP编程

    package com; import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * Socket Se ...

  7. JAVA 通过 Socket 实现 TCP 编程

    简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机 ...

  8. iOS socket 实现tcp和服务器长链接的简单使用心得

    首先iOS端用了一个第三方的框架 GCDAsyncSocket 当然这个是CocoaAsyncSocket框架里面的一部分 Github下载地址https://github.com/robbiehan ...

  9. 深入浅出--iOS的TCP/IP协议族剖析&&Socket

    深入浅出--iOS的TCP/IP协议族剖析&&Socket   简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有Socket.(--该文很干,酝酿了许久! ...

随机推荐

  1. python3 Django框架报错(备忘录)

    这篇博客主要总结的学习Django框架中,遇到的报错如何去解决问题: 1.decimal.InvalidOperation: decimal.InvalidOperation: [<class ...

  2. [POI2018]Prawnicy

    题目大意: 有$n(n\le10^6)$个线段,每个线段覆盖的范围是$[l_i,r_i]$,要求从中选取$k(k\le10^6)$个线段使得这些线段覆盖范围的交集最大,求最大交集及任意一种方案. 思路 ...

  3. @requestBody注解的使用(上)

    1.@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是ap ...

  4. 安装CentOS 6停在selinux-policy-targeted卡住的问题解决

    在刚开始安装时,设置swap分区.设置swap分区.设置swap分区 参考: http://tieba.baidu.com/p/3817971339 http://blog.csdn.net/zhan ...

  5. 激活office2010出现“Failed to inject memory”错误

    使用Office 2010 Toolkit 2.2.3激活office2010的时候,出现Failed to inject memory!错误,原因是前期使用KM激活过office 2010,然后默认 ...

  6. Go语言的9大优势和3大缺点, GO语言最初的定位就是互联网时代的C语言, 我为什么放弃Go语言

    Go语言的9大优势和3大缺点 转用一门新语言通常是一项大决策,尤其是当你的团队成员中只有一个使用过它时.今年 Stream 团队的主要编程语言从 Python 转向了 Go.本文解释了其背后的九大原因 ...

  7. Less资源汇总

    GUI编译工具 为方便起见,建议初学者使用GUI编译工具来编译.less文件,以下是一些可选GUI编译工具: koala(Win/Mac/Linux) 国人开发的LESSCSS/SASS编译工具.下载 ...

  8. javascript 的事件绑定和取消事件

    研究fabricjs中发现,它提供canvas.on('mousemove', hh) 来绑定事件, 提供 canvas.off()来取消绑定事件这样的接口,很是方便, 那我们就不妨探究一下内在的实现 ...

  9. android: android中dip、dp、px、sp和屏幕密度

    android中dip.dp.px.sp和屏幕密度 转自:http://www.cnblogs.com/fbsk/archive/2011/10/17/2215539.html 1. dip: dev ...

  10. java中short、int、long、float、double取值范围

    一.分析基本数据类型的特点,最大值和最小值.1.基本类型:int 二进制位数:32包装类:java.lang.Integer最小值:Integer.MIN_VALUE= -2147483648 (-2 ...