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

时间: 2024-12-20 05:33:03

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

Socket网络编程进阶与实战

第1章 课程导学(Java语言教学)[说明:课程案例部分以Java语言实现]本章节首先会对课程进行导学讲解,包括为什么应该学习本课程,课程目标与收获,课程内容安排,适合人群和学习建议等,接着会讲解代码规范与开发注意事项,目的全在于希望极大的方便同学进行本课程的学习.... 第2章 Socket网络编程快速入门本章首先整体介绍什么是Socket网络编程:让大家对Socket有个大概的概念与方向.之后通过几个小Case引出课程的主角,轻松愉快的让你体验到Socket编程的快感.本章节主要收获:1.

iOS socket网络编程

代码下载 服务端代码下载地址 客户端代码下载地址 相关概念 socket是一个针对TCP和UDP编程的接口,你可以借助它建立TCP连接等.socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议.Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口. socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦

iOS socket TCP UDP

TCP: 服务器: #import <Foundation/Foundation.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main(int argc, const char * argv[]) { @autoreleasepool { // 1 int err; int fd=socket(AF_INET, SOCK_STREAM , 0);

socket TCP编程中connect的一些坑

1.服务端listen成功后,系统就自动接收客户端请求了 man listen: 其中有一段 The  behavior of the backlog argument on TCP sockets changed with Linux 2.2.  Now it specifies the  queue  length  for  completely  established sockets  waiting  to  be  accepted, instead of the number o

java Socket(TCP)编程小项目

package 服务器端相关操作; import java.io.Serializable; /* * 创建存储需要传输信息的对象,方便客户端向服务器端传送数据 */ public class ClientToServerInfo implements Serializable{ String sign; String name; String password_OR_path; //重写构造函数 public ClientToServerInfo(String sign,String name

(转)iOS 各种网络编程总结--进程、线程、Socket、HTTP、TCP/IP、TCP和UDP

######################################################### 进程与线程 进程和线程都是由操作系统分配和调度的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性. 进程是一块包含了某些资源的内存区域.操作系统利用进程把它的工作划分为一些功能单元.进程中所包含的一个或多个执行单元称为线程(thread).进程还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更

IOS socket编程--Asyncsocket

iPhone的标准推荐是CFNetwork 库编程,其封装好的开源库是 cocoa AsyncSocket库,用它来简化CFNetwork的调用,它提供了异步操作 主要特性有: 队列的非阻塞的读和写,而且可选超时.你可以调用它读取和写入,它会当完成后告知你 自动的socket接收.如果你调用它接收连接,它将为每个连接启动新的实例,当然,也可以立即关闭这些连接 委托(delegate)支持.错误.连接.接收.完整的读取.完整的写入.进度以及断开连接,都可以通过委托模式调用 基于run loop的,

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

深入浅出--iOS的TCP/IP协议族剖析&&Socket 简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有Socket.(--该文很干,酝酿了许久!你能耐心看完吗?) 我在这个文章中,列举了常见的TCP/IP族中的协议,今天主角是--传输层协议. 传输层(Transport Layer)是OSI(七层模型)中最重要.最关键的一层,它负责总体的数据传输和数据控制的一层,传输层提供端到端(应用会在网卡注册一个端口号)的交换数据的机制,检查分组编号与次序.传输层对

Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select poll epoll udp组播 线程池

[本文谢绝转载原文来自http://990487026.blog.51cto.com] Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select  poll  epoll udp组播 线程池 TCP 11种状态理解: 1,客户端正常发起关闭请求 2,客户端与服务端同时发起关闭请求 3,FIN_WAIT1直接转变TIME_WAIT 4,客户端接收来自服务器的关闭连接请求 多路IO转接服务器: select模型 poll模型 epoll模型 udp组播模型 线