java基于TCP客户端的json报文通讯

1.java中json数据对象的创建

这里用到的是net.sf.json.JSONObject,put(Object,Object)可以简单的形成json树

        JSONObject json = new JSONObject();
        JSONObject object = new JSONObject();
        json.put("inter_mark", new String("SingleCheck".getBytes("GBK"), "UTF-8"));
        json.put("user_code", new String("l89798990".getBytes("GBK"), "UTF-8"));
        object.put("head", json);
        object.put("name", new String("name".getBytes("GBK"), "UTF-8"));

2.socket客户端的创建

        Socket socket = new Socket("ip", port);
        OutputStream outputStream = socket.getOutputStream();
        PrintWriter printWriter = new PrintWriter(outputStream);

这里建立了socket客户端,并调用了socket获取输出流的方法,用到字符输出流,可以直接将字符传入而输出,但注意要冲刷缓冲区,防止出现字符停留在缓冲区中的情况。补充:字符流拥有缓冲区而字节流没有缓冲区(缓冲区在内存中),需要的话自己设置。(对于文本形式的文件或者报文建议用字符流读取,而对于音频等其他文件需要用字节流,不确定的也建议用字节流)。

3.报文发送

直接调用printerWrite的print方法,传入jsonObject即可,传输代码写完后记得调用socket的shutdownOutput方法,此话api中的解释:此套接字的输入流置于流的末尾,个人理解忽略之后传输的数据,但socket连接并不会关闭,防止需要时再次建立连接

4.响应报文接收

        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
		String info = "";
		String temp = null;
		while ((temp = bufferedReader.readLine()) != null) {
			info += temp;
			System.out.println("客户端接收服务端发送信息:" + Unicode2GBK(info));
		}
                socket.shutdownInput();
		inputStream.close();
		printWriter.close();
		outputStream.close();
		socket.close();

同上此处用字符输入流读取响应,按行读取,同样记得关流,此处用到了一个Unicode2GBK方法下面会列出,作用是将此处收到的unicode编码报文转换为gbk,接着记得关掉所有的流,释放资源,关流要遵循由外到内的规则,最终记得关闭socket,此处省略io异常的catch块,内部直接将对象置为空。

附编码转换代码:

public static String Unicode2GBK(String dataStr) {
        int index = 0;
        StringBuffer buffer = new StringBuffer();
 
        int li_len = dataStr.length();
        while (index < li_len) {
            if (index >= li_len - 1
                    || !"\\u".equals(dataStr.substring(index, index + 2))) {
                buffer.append(dataStr.charAt(index));
 
                index++;
                continue;
            }
 
            String charStr = "";
            charStr = dataStr.substring(index + 2, index + 6);
 
            char letter = (char) Integer.parseInt(charStr, 16);
 
            buffer.append(letter);
            index += 6;
        }
 
        return buffer.toString();
    }

一篇简单的socket客户端代码,欢迎看到的朋友提问或指正,本人一定洗耳恭听,有任何问题一定尽力解决。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值