在项目中遇到对接Socket通信的接口,传输的信息没有开始符号,结束符号及中间分隔符,传送信息的每段长度都固定,第一次遇到这种接口,记录下来以供参考,基本逻辑就是这样,一般来说我们这都是客户端,那一方为服务端,我们只需要写一个发送消息的客户端即可,代码涉及机密已做处理。
try {
Socket socket = new Socket("host", port);
logger.info("连接已经建立"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
//一般来说接口多以字符串形式右补空格,总字符长度固定,使用format可以右补空格,"%1$-10s"的意思为不满10位则右补空格
user = String.format("%1$-10s",user);
SimpleDateFormat yymmdd = new SimpleDateFormat("yyyymmdd");
Date date = new Date();
String date = yymmdd.format(date);
logger.info("本次查询时间为:" + times + " 账户名为: " + user);
//拼接要发送的字符串
String sendmsg = XXX + date +user
OutputStream outputStream = socket.getOutputStream();
//发送消息
outputStream.write(msg_send.getBytes());
//接收服务器端的响应
InputStream inputStream = socket.getInputStream();
//把数据放到byte数组中,可以指定接收多少长度的数据
byte[] headBytes = new byte[36];
logger.info("开始读取数据");
//传入刚才new的数组,第二个参数为从数组第几个索引开始读数据,第三个参数为读多少数据,一般读的是数组的长度
inputStream.read(headBytes, 0, headBytes.length);
logger.info("读取完成");
/*public String(byte bytes[], int offset, int length) String的构造方法,通过这个方法把存在byte数组中的数据转化成字符串
第一个参数为存放数据的byte数组,第二个是从第几位开始读取,第三个为读取多少个*/
String xxx= new String(headBytes , 142, 10).trim();
//刷新缓冲区
outputStream.flush();
outputStream.close();
inputStream.close();
//关闭连接!!!
socket.close();
return serviceCallIntfResponse;
}catch (Exception e){
socket.close();
logger.info(e.getLocalizedMessage());
}
有写的不好的地方请大家给出建议 (ಥ_ಥ)