本文是基于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. javascript IE与其他主流浏览器兼容性问题积累

    javascript兼容性问题 在javascript中,各个浏览器基本语法差距不大,其兼容问题主要出现在各个浏览器的实现上,尤其对事件的支持有很大问题,在此我就说说我知道的几个问题. ① 在标准的事 ...

  2. EclEmma单元测试覆盖率统计插件

    EclEmma是Eclipse里的一个插件,安装简单,覆盖率显示直观.安装EclEmma.打开Eclipse,点击Help → Intall New SofaWare → Work with 输入 h ...

  3. 通过Maven配置测试环境和开发环境连接不同的数据库

    通过Maven配置测试环境和开发环境连接不同的数据库   作者及来源: 通灵宝玉 - 博客园    收藏到→_→: 此文来自: 马开东博客 网址:http://www.makaidong.com   ...

  4. HTTP基础知识

    HTTP是计算机通过网络进行通信的规则,是一种无状态的协议,不建立持久的连接(客户端向服务器发送请求,web服务器返回响应,接着连接就被关闭了): 一个完整的HTTP请求连接,通常有下面7个步骤: 1 ...

  5. fs模块主要功能小解

    打开文件: fs.open(path, flags[, mode], callback) path: 要打开的文件的路径 flags: 文件打开的行为 解析: r 读取 w 写入并删除原内容 + r+ ...

  6. Calendar.getInstance()获取当天指定点上的时间[转载]

    ctoday.add(Calendar.DAY_OF_MONTH, 1); 明天时间 //获得当天0点时间public static int getTimesmorning(){Calendar ca ...

  7. Redis常用API-使用文档

    一.Redis Client介绍 1.1.简介 Jedis Client是Redis官网推荐的一个面向java客户端,库文件实现了对各类API进行封装调用. Jedis源码工程地址:https://g ...

  8. OpenCV成长之路:图像直方图的应用

    OpenCV成长之路:图像直方图的应用 2014-04-11 13:57:03 标签:opencv 图像 直方图 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否 ...

  9. hdu_5753_Permutation Bo(找规律)

    题目连接:hdu_5753_Permutation Bo 题意: 给你一个有n个数的数列c1~cn,h1~hn为1~n的排列,求ci[hi>hi-1  and  hi>hi+1]的期望和. ...

  10. 第10章 接口、继承与多态----Object类

    在Java中,所有的类都直接或间接继承了java.lang.Object类.Object类是比较特殊的类,它是所有类的父类,是Java类层中的最高层类.当创建一个类时,总是在继承,除非某个类已经指定要 ...