本文是基于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. 信息处理,分而治之-- ESFramework 使用技巧

     ESFramework开发手册系列文章已经详细介绍了如何使用ESPlus提供的ESPlus.Application.CustomizeInfo空间来发送和处理自定义信息,而且,在我们在前面介绍的de ...

  2. java方法的多态性理解

    1.什么是java的多态 浏览了别人博客中的一些介绍多态的文章,发现大家的描述有点不一样,主要区别在于是否把方法的重写算做多态.一种我比较认同的说法如下: 多态分为两种 a. 编译时多态:方法的重载: ...

  3. lnmp vps服务器删除mysql日志文件三种方法

    我在上一篇文章介绍了著名的LNMP主机一键安装工具,对比了军哥lnmp和AMH主机的差别,由于AMH拥有用户后台界面,易于新手操作,值得推荐. 但是,上周末我网站宕机,收到DNSPOD发来了宕机提醒, ...

  4. GetLastError() 返回值含义

    [0]-操作成功完成.[1]-功能错误.[2]-系统找不到指定的文件.[3]-系统找不到指定的路径.[4]-系统无法打开文件.[5]-拒绝访问.[6]-句柄无效.[7]-存储控制块被损坏.[8]-存储 ...

  5. 在 iOS 应用中直接跳转到 AppStore 的方法

      找到应用程序的描述链接,在itunes中找到相应的应用,(如下图),点击免费右边的下方向键,选择复制链接,就拿到了对应的app的描述链接 比如:https://itunes.apple.com/c ...

  6. C++常用库函数

    C++常用库函数  转自:http://blog.csdn.net/sai19841003/article/details/7957115 1.常用数学函数 头文件 #include <math ...

  7. iOS动画编程

    IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKeyframeAnimation& ...

  8. 在客户端缓存Servlet的输出

    对于不经常变化的数据,在servlet中可以为其设置合理的缓存时间值,以避免浏览器频繁向服务器发送请求,提升服务器的性能. public class ServletContext7 extends H ...

  9. VBS操作JS网页元素实例

    '=========================================================================='' VBScript Source File - ...

  10. hdu_5792_World is Exploding(树状数组+逆序对)

    题目链接:hdu_5792_World is Exploding 题意: 给你一个数列,让你找有多少个(a,b,c,d)满足a≠b≠c≠d,1≤a<b≤n,1≤c<d≤n,Aa<Ab ...