socket上传nsdictionary的json数据异常
2024-09-07 09:59:00
异常情况如下:按照正常的写法,将上传对数据封装在nsdictionary里,然后检验是否符合json格式化,调用系统的json序列化方法将nsdictionary转化为json数据然后上传,
异常结果如下:,后台只能收到收到nsdictionary的第一个{,后测试数据从nsdictionary的第一个{断开了
由于控制台打印的nsdictioanry数据如下
故猜测上传数据时"\n"作为了数据的分隔符被切断了,所以将nsdictionary转化为nsstring并且将"\n"替换为空格然后发现数据无法上传,最后追加了"\n"到nsstring末端,上传成功
完整代码如下:
#pragma mark - GCDAsyncSocketDelegate
/**
* 链接成功
*
* @param sock sock实例
* @param host IP
* @param port 端口
*/
-(void)socket:(GCDAsyncSocket *)sock
didConnectToHost:(NSString *)host
port:(uint16_t)port
{
NSLog(@"didConnectToHost");
// gpstype:2015
// name:账号
// pswd:密码 NSLog(sock.isConnected?@"YES":@"NO");
if (sock.isConnected)
{
/*
//nsstring上传需要加"\n"分隔符方可上传成功
[sock writeData:[@"ABCABCABCABCABCABC\n" dataUsingEncoding:NSUTF8StringEncoding]
withTimeout:-1
tag:0];
*/ NSDictionary* nsDictionaryUser=@{@"gpsinfo":@"Gpsinfo",@"pswd":self.passWord,@"other":@"",@"gpstype":@,@"name":self.name}; if ([NSJSONSerialization isValidJSONObject:nsDictionaryUser])
{
NSLog(@"isValidJSONObject");
NSError* error;
//先转nsdata再转nsstring是为了保证nsdictionary格式不变
NSData *nsDataUser= [NSJSONSerialization dataWithJSONObject:nsDictionaryUser
options:NSJSONWritingPrettyPrinted
error:&error];
NSString* json=[[NSString alloc] initWithData:nsDataUser
encoding:NSUTF8StringEncoding];
// NSLog(@"nsDictionaryUser:%@",json); json=[json stringByReplacingOccurrencesOfString:@"\n"
withString:@""];
//空格根据情况可以不去掉
json=[json stringByReplacingOccurrencesOfString:@" "
withString:@""];
json=[json stringByAppendingString:@"\n"];
NSLog(@"json:%@",json); [sock writeData:[json dataUsingEncoding:NSUTF8StringEncoding]
withTimeout:-
tag:]; //保持读取的长连接
[sock readDataWithTimeout:-
tag:]; if (error)
{
NSLog(@"localizedDescription:%@",[error localizedDescription]);
NSLog(@"localizedFailureReason:%@",[error localizedFailureReason]);
}
else
{
} } } }
数据上传成功了,后台可以根据数据返回数据了
最新文章
- YUM源
- Tigase集群设置
- Git pull 强制覆盖本地文件
- POJ3680 Intervals(最小费用最大流)
- 利用JSONP进行水坑攻击
- String.IsNullOrWhiteSpace和String.IsNullOrEmpty的区别
- Seesion工作原理
- js X年X周 转成 具体日期
- Spark性能调优之Shuffle调优
- Oracle总结【PLSQL学习】
- Android6.0 init 深入分析
- Erlang edoc 多级目录出错
- MyDAL - like &;&; not like 条件 使用
- 使用graphviz画图
- windows安装并配置 nginx
- redis 高可用
- 「Android」单例的五种写法
- Tensorflow显示图片
- selenium-java,selenium安装配置
- Solr——从postgresql数据库导入数据
热门文章
- std::map Intro
- python 自动安装工具 setuptools(easy_install) 的使用
- (转)linux应用之test命令详细解析
- DEDE把变量放进session中,结果取值为null的问题
- Facebook TSDB论文Gorilla分析
- redis 读写锁实现
- 解决在 WP8/ WP8.1 项目中 引用 C++ 组件时出现的 System.TypeLoadException 错误
- vue将数据绑定到属性中
- Spring的注解积累
- 根据tomcat日志查找想要的错误日志