首页
社区
课程
招聘
[求助]c++ 与 java socket 通信 json包解析出问题
发表于: 2015-7-1 17:40 11144

[求助]c++ 与 java socket 通信 json包解析出问题

2015-7-1 17:40
11144
在做一个课题,目前的状况是android底层(c++写的)信息采集后,将信息装载至json包,通过socket传至android app,进行处理,目前android app解析c++写的json包出现问题,内容乱码,应该是编码的问题,但不知到怎么解决,(传输char数组完全ok)求大神帮助。

贴 实现代码:
服务器端接收(java)代码://这部分代码是网上的代码
            InputStream ins = socket.getInputStream();
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            while ((t = ins.read(buffer)) != -1) {
//                t = ins.read(buffer);//此方法阻塞
                System.out.println("第" + ++count + "次接收");
                os.write(buffer);
            }
            System.out.println(os.size());
            */
            //第一步,生成Json字符串格式的JSON对象
//            JSONObject jsonObject=new JSONObject(os.toString());
客户端socket (c++)代码:
《1》:与服务器连接部分代码
        sockfd = socket(AF_INET, SOCK_STREAM, 0);
        LOGD("[+]create socket successfully");
        if (sockfd == -1) {
                perror("套接字创建失败\n");
                exit(1);
        }
        struct sockaddr_in servaddr;

        servaddr.sin_family = AF_INET;
        servaddr.sin_port = htons(8821);
        servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
        LOGD("[+]configure socket successfully");

        res = connect(sockfd, (struct sockaddr *) &servaddr,
                        sizeof(struct sockaddr));
《2》客户端发送json代码
                LOGD("第 %d 次 发送JSon",count);
                CollectedApiInfo temp = InfoSender::mCycledBlockingQueue->send();
                s = temp.convertToJson();
                //在此处添加发送json
                int len = sizeof(s);
                int result = (int) send(sockfd, s.c_str(), len, 0);
                LOGD("send Json successfully");
                if (result == -1)
                        LOGE("[-]send Json error!\r\n");
                ++count;
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 110
活跃值: (527)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
json最好传送utf8的字串。
2015-7-1 20:31
0
雪    币: 0
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我发送的是Json转换的string,我的理解是:c++中string就是utf-8的char* 啊
Json::Value root;
.............
string out = root.toStyledString();
2015-7-2 09:52
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
4
想多了,c这种语言,怎么会没事帮你转编码。
看你输入源了,比如win下的cmd,默认中文编码应该是GBK,这个在属性里面能看到。根据你的输入源确定编码,然后再做解析吧。
os.toString()
toString的时候,可以指定编码
2015-7-2 10:12
0
游客
登录 | 注册 方可回帖
返回
//