iOS Socket/Tcp编程 GCDAsyncSocket的实战(带回调)
很多同学一听到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的实战(带回调)的更多相关文章
- Linux C Socket TCP编程介绍及实例
转自:https://blog.csdn.net/lell3538/article/details/53335231 { printf("向服务器发送数据:%s\n",sendbu ...
- Socket - TCP编程
Socket是网络编程的一个抽象概念. 通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可 socket参数及常用功能 ...
- iOS socket TCP UDP
TCP: 服务器: #import <Foundation/Foundation.h> #include <sys/socket.h> #include <netinet ...
- java Socket(TCP)编程小项目
package 服务器端相关操作; import java.io.Serializable; /* * 创建存储需要传输信息的对象,方便客户端向服务器端传送数据 */ public class Cli ...
- Java Socket TCP编程(Server端多线程处理)
package com; import java.io.*; import java.net.Socket; /** * Socket Client * <p> * Created by ...
- Java Socket TCP编程
package com; import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * Socket Se ...
- JAVA 通过 Socket 实现 TCP 编程
简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机 ...
- iOS socket 实现tcp和服务器长链接的简单使用心得
首先iOS端用了一个第三方的框架 GCDAsyncSocket 当然这个是CocoaAsyncSocket框架里面的一部分 Github下载地址https://github.com/robbiehan ...
- 深入浅出--iOS的TCP/IP协议族剖析&&Socket
深入浅出--iOS的TCP/IP协议族剖析&&Socket 简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有Socket.(--该文很干,酝酿了许久! ...
随机推荐
- adobe flash builder 4.6最新能用的序列号
神key来了: 1424-4464-3877-6130-5013-5457 妈的,我两台开发机器,有一台死活激活不了,每隔一段时间就去网上搜搜激活方式已经快成为我的一个生活习惯了,可惜每次出来的都是下 ...
- windbg --sqlserver 实例 转
http://blog.csdn.net/obuntu/article/details/5962378 SQLSERVER DUMP 调试 在下面的对话框输入 ~ 会出现线程的信息 0:000> ...
- java中的注解详解和自定义注解
一.java中的注解详解 1.什么是注解 用一个词就可以描述注解,那就是元数据,即一种描述数据的数据.所以,可以说注解就是源代码的元数据.比如,下面这段代码: @Override public Str ...
- Font Awesome:图标字体,完全CSS控制
Font Awesome是一种web font,它包含了几乎所有常用的图标,比如Twitter.facebook等等.用户可以自定义这些图标字体,包括大小.颜色.阴影效果以及其它可以通过CSS控制的属 ...
- 使用webpack构建本地服务器
想不想让你的浏览器监听你的代码的修改,并自动刷新显示修改后的结果,其实Webpack提供一个可选的本地开发服务器,这个本地服务器基于node.js构建,可以实现你想要的这些功能,不过它是一个单独的组件 ...
- Mac上安装使用Nginx
1.brew search nginx 2.brew install nginx 启动nginx ,sudo nginx ;访问localhost:8080 发现已出现nginx的欢迎页面了. 备注: ...
- eclipse 配置maven 项目tomcat 运行
- try....exception....finally
class MyException(Exception): def __init__(self,msg): self.msg=msg def __str__(self): return self.ms ...
- attempt to dereference a generic a pointer(转)
在Linux下的GDB环境中,用p 命令查看一个void *型的变量的时候,提示为: "attempt to dereference a generic a ...
- 记一次R的可视化使用-生成城市各个景点的多边形图
项目中须要用到全国各个城市的景点坐标范围.须要人工审核各个景点的数据正确性和各个景点之间的距离分布.首先想到的就是使用R绘制每一个景点的多边形区域. 首先通过python,依据数据生成R画图代码,当然 ...