很多同学一听到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. Android中选项卡功能的实现

    Android中选项卡功能的实现 Android中使用TabHost和TabWidget来实现选项卡功能.TabHost必须是布局的根节点,它包含两个子节点: TabWidget,显示选项卡: Fra ...

  2. Spring使用ComponentScan扫描Maven多模块工程的其它模块

    说明:在新建好了Maven多模块工程后,如果想要在其它模块也能使用Spring的对象管理,比如@Autowrited这些注入方式,那么就必须开启包扫描的功能才能使其进行注入到Spring的对象管理中. ...

  3. JavaScript 中函数节流和函数去抖的讲解

    JavaScript 中函数节流和函数去抖的讲解 我们都知道频繁触发执行一段js逻辑代码对性能会有很大的影响,尤其是在做一些效果实现方面,或者逻辑中需要进行后端请求,更是会导致卡顿,效果失效等结果,所 ...

  4. 使用spring-boot-admin对spring-boot服务进行监控

    原文:http://www.cnblogs.com/ityouknow/p/8440455.html 上一篇文章<springboot(十九):使用Spring Boot Actuator监控应 ...

  5. 【Git】GitHub for Windows使用(1)

    目录 1.下载GitHub for windows 客户端 2.注册GitHub 3.启动windows端客户端,登录帐号 4.了解Git客户端,从而了解Git的大体功能 5.创建一个新的资源库  6 ...

  6. SpringBoot项目设置热部署

    记录一个SpringBoot 设置热部署(修改项目之后,项目自动重启)实例 POM.XML 文件 <!-- 配置springBoot项目的热部署启动 --> <dependency& ...

  7. WebLogic Server 关键优化指标

    昨天给客户做巡检,又将整个WebLogic Server的优化过程走了一遍,记录下来给大家参考. 1.JVM优化 查看 $ps –ef | grep java /opt/java1.5/bin/jav ...

  8. 多重采样(MultiSample)下的FBO反锯齿 【转】

    在三维渲染的过程中,锯齿总是让人讨厌的东西.抗锯齿的一种采用方式是多重采样,本文主要小记一下FBO与多重采样的关系.——ZwqXin.com 首先,关于FBO(Frame Buffer Object) ...

  9. Listener监听器之HttpSessionListener

    编写一个OnlineUserListener. package anni; import java.util.List; import javax.servlet.ServletContext; im ...

  10. Laravel系列教程一:安装及环境配置

    免费视频教程地址https://laravist.com/series/laravel-5-basic 最近在SF上面看到越来越多的Laravel相关的问题,而作为一个Laravel的脑残粉,本来打算 ...