socket通信的json数据传输与获取
本文是基于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数据传输与获取的更多相关文章
- Android模拟器的ip获取以及模拟器之间socket通信
Android模拟器的ip获取以及模拟器之间socket通信 http://kalogen.iteye.com/blog/1565507 作者:李波 实现网络五子棋时用到了两个设备 ...
- 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图. ...
- 网络编程:Http通信与Socket通信
http://note.youdao.com/share/?id=f14d304548003f65e34255d3ddf9df31&type=note 网络编程:Http通信与Socket通信 ...
- 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?
这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...
- Android之Socket通信、List加载更多、Spinner下拉列表
Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...
- Android开发--Socket通信
一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...
- Socket通信(转)
一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户 ...
- http和socket通信的区别
应用层:HTTP协议(基于传输层的TCP协议,主要解决如何包装数据) 传输层: TCP协议(基于网络层的IP协议).TPC/IP协议(主要解决数据如何在网络中传输) 网络层: IP 协议 socket ...
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...
随机推荐
- 消息同步调用-- ESFramework 4.0 进阶(07)
分布式系统的构建一般有两种模式,一是基于消息(如Tcp,http等),一是基于方法调用(如RPC.WebService.Remoting).深入想一想,它们其实是一回事.如果你了解过.NET的Prox ...
- 关于mysql中数据类型
bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8 个字节. bigint ...
- 高精度运算专题-输出函数与字符串转数字函数(Output function and the string to number function)
输出函数:这个函数别看它小,但浓缩的都是精华啊 作用:对于高精度的数组进行倒序输出 思路:首先从被传入的数组第一位开始,一直往前扫输出就可以了(i--) 注释:因为每个数组的第一位是用来存储这个数组的 ...
- E: GPG error: http://mirrors.oschina.net trusty-backports InRelease: Clearsigned file isn't valid, got 'NODATA' (does the network require authentication?)
E: GPG error: http://mirrors.oschina.net trusty-backports InRelease: Clearsigned file isn't valid, g ...
- HDU 5778 abs
题意转化一下就是寻找一个数P,要求P质因素分解完后,质因素没有重复,还要保证abs(P*P-x)最小. 暴力,在sqrt(x)附近向下向上分别枚举一下. #pragma comment(linker, ...
- HDU 3081 Marriage Match II
二分图的最大匹配+并查集 每次匹配完之后,删除当前匹配到的边. #include<cstdio> #include<cstring> #include<cmath> ...
- ios简单更改系统TabBar的高度
- (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; CGRect frame = self.tabBar.frame; fra ...
- Chapter 1 First Sight——27
Throughout all this conversation, my eyes flickered again and again to the table where the strange f ...
- hdu_5794_A Simple Chess(lucas+dp)
题目链接:hdu_5794_A Simple Chess 题意: 给你n,m,从(1,1)到(n,m),每次只能从左上到右下走日字路线,有k(<=100)的不能走的位置,问你有多少方案 题解: ...
- Android Studio的使用(十四)--如何查看资源或者函数在哪些类中被引用
1.我们都知道在Eclipse中可以通过快捷键Ctrl+Shift+G开快速搜索方法.类.资源都在那个类中被使用了. 2.在Android Studio中则使用快捷键Ctrl+G.