本文是基于scoket通信的tcp来进行数据的json格式传输与获取的。

首先,我们先要下载AsyncSockethttps://github.com/robbiehanson/CocoaAsyncSocket类库,将RunLoop文件夹下的AsyncSocket.h, AsyncSocket.m, AsyncUdpSocket.h, AsyncUdpSocket.m 文件拷贝到自己的project中。

然后在项目中添加CFNetwork.framework工具包。

然后开始创建连接,代码如下:

scoket=[[AsyncSocket alloc]initWithDelegate:self];   //初始化

[scoket connectToHost:@"host端口" onPort:port error:nil];

//例如:

[scoket connectToHost:@"192.168.10.128" onPort:4001 error:nil];

连接的具体步骤点击connectToHost即可查看。

创建连接后,导入代理标题头@interface ViewController ()<AsyncSocketDelegate>使用下边代理方法:

代理方法1:查看scoket是否连接成功

-(void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{

NSLog(@"连接成功");

[scoket readDataWithTimeout:timezone tag:1];//接收数据

//心跳包

_connectTimer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(longConnectToScoket) userInfo:nil repeats:YES];

}

longConnectToScoket方法的实现如下:

//心跳包长连接

-(void)longConnectToScoket{

[scoket readDataWithTimeout:timezone tag:1];//接收数据

}

接下来是数据的封装、发送与接收:

-(void)clickPublish{

dic=@{

@"user"    :@"linda",                   //用户名

@"museum"  :@"1",                   //博物馆名

@"content" :commentField.text   //评论内容

};

//字典转换成字符串

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];

str=[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

//封装数据

NSData   *commentData=[str dataUsingEncoding:NSUTF8StringEncoding];

[scoket writeData:commentData withTimeout:10 tag:1];//发送数据

[scoket readDataWithTimeout:30 tag:1];//接收数据

commentField.text=nil;//清空评论栏内容

}

对获取的数据进行处理:

-(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{

NSLog(@"data:%@",data);

NSString *message=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"message:%@",message);

//把字符串转化字典

NSData *jsonData = [message dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary *dic1=[NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];

str1=[dic1 objectForKey:@"content"];//获取键所对应的值

NSLog(@"str1=%@",str1);

//发出通知

[[NSNotificationCenter defaultCenter]postNotificationName:@"change" object:str1];

}

//通知接收,其中_allComments是可变数组

-(void)receiveNotify{

//注册通知

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(message:) name:@"change" object:nil];

}

//注册通知方法

-(void)message:(NSNotification *)note{

NSString *str=[[NSString alloc]init];

str = note.object;

_allComments=[[NSMutableArray alloc]init];

[_allComments addObject:str];

[self start];

}

socket通信的json数据传输与获取的更多相关文章

  1. Android模拟器的ip获取以及模拟器之间socket通信

    Android模拟器的ip获取以及模拟器之间socket通信           http://kalogen.iteye.com/blog/1565507 作者:李波 实现网络五子棋时用到了两个设备 ...

  2. 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)

    原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图. ...

  3. 网络编程:Http通信与Socket通信

    http://note.youdao.com/share/?id=f14d304548003f65e34255d3ddf9df31&type=note 网络编程:Http通信与Socket通信 ...

  4. 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?

    这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...

  5. Android之Socket通信、List加载更多、Spinner下拉列表

    Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...

  6. Android开发--Socket通信

    一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...

  7. Socket通信(转)

    一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户 ...

  8. http和socket通信的区别

    应用层:HTTP协议(基于传输层的TCP协议,主要解决如何包装数据) 传输层: TCP协议(基于网络层的IP协议).TPC/IP协议(主要解决数据如何在网络中传输) 网络层: IP 协议 socket ...

  9. Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)

    转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...

随机推荐

  1. java反射机制(1)

    反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以访问,检测和修改它本 ...

  2. kvstore之memcached为存储介质

    ecstore中kvstore选用memcached作为存储介质 kvstore存储类选用base_kvstore_memcached(app/base/lib/kvstore/memcached.p ...

  3. php 好用的函数

    extract — 从数组中将变量导入到当前的符号表,数组的键将作为新的变量,数组的值将最为新变量的值

  4. ELK 基本搭建

    ELK是一套日志分析系统: 开发人员不能登录线上服务器查看详细日志各个系统都有日志,日志数据分散难以查找日志数据量大,查询速度慢,或者数据不够实时一个调用会设计多个系统,难以在这些系统的日志中快速定位 ...

  5. 《JavaScript高级程序设计》读书笔记 ---执行环境及作用域

    执行环境及作用域 执行环境(execution context,为简单起见,有时也称为“环境”)是JavaScript 中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自 ...

  6. 数据库文件导入导出操作,以及赋予权限SQL语句

    1.导出数据库xxxx和tlog(经过测试,没有问题)# /data/mysql/bin/mysqldump -u root -ppassword qq9x | gzip > /home/xxx ...

  7. HDU - 1045 Fire Net(搜索)

    Description Suppose that we have a square city with straight streets. A map of a city is a square bo ...

  8. Linux下将Mysql和Apache加入到系统服务里的方法

    Apache加入到系统服务里面: cp /安装目录下/apache/bin/apachectl /etc/rc.d/init.d/httpd 修改httpd 在文件头部加入如下内容: ### # Co ...

  9. unix文件系统

    转自here 我一向坚持的原则,那就是任何东西的根本性的,本质上的原理以及背后的思想都是及其简单的,所谓的复杂性都是优化与策略化的扩展带来的,正如TCP一样,UNIX的文件系统也不例外!我们必须知道, ...

  10. 如何使用 AngularJS 的 ngShow 和 ngHide

    今天我们来看看怎样使用Angular的ngShow 和ngHide 指令来完成它们听起来应该完成的,显示和隐藏! 它们应该做的事 ngShow 和ngHide 允许我们显示或隐藏不同的元素.这有助于创 ...