很多同学一听到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. Exercise02_17

    import javax.swing.JOptionPane; public class FrostTemperature { public static void main(String[] arg ...

  2. 通信编码解码 c11 实现 [ lua 专用版]

    #include <istream> #include <ostream> #include <iostream> #include <strstream&g ...

  3. hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)

    还是畅通工程                                                                            Time Limit: 4000/2 ...

  4. 【sql】关联查询+表自关联查询

    表: 经销商 dealer   字段 uid  parent_uid  name 联系人 contact  字段 uid  dealer_id  contact_main 需求: 想要查询到经销商的信 ...

  5. vue生命周期钩子,一张图片

  6. JavaScript数组api简单说明

    1.一个数组加上另一个(一些)数组,不会修改原数组只会返回新数组 arrayObject.concat(arrayX,arrayX,......,arrayX) 2.把数组按照指定字符串分离,不会修改 ...

  7. mac 下安装 mysql (蛋疼)

    mac先安装mydql步骤 1.首先从官网上下载 mac版本的mysql:我的是mysql-5.7.20-macos10.12-x86_64.dmg 2.正常安装: 3.在系统偏好设置的最底下.1:是 ...

  8. 8、面向对象class

    对象的概念同其他语言的对象相同 一个基本的类 #!/usr/bin/python class person: def hi(self,name): print 'Hello,%s'%name p1= ...

  9. ylbtech-DBD-WeShop(微店)

    ylbtech-DatabaseDesgin:ylbtech-DBD-WeShop(微店) DatabaseName:WESHOP Model:微店数据设计 Type:专业技术网站 Url: 1.A, ...

  10. install libiconv libraries

    #下载地址: https://ftp.gnu.org/pub/gnu/libiconv/ #编译安装 ./configure --prefix=/usr/local make make install ...