分享给以后对接交易所行情的程序员
package com.ycyj.sjs;
import java.io.InputStream;
import java.net.Socket;
import java.nio.ByteBuffer;
/**
* MDC VSS连接客户端
* Vendor Supplied System 接入用户服务器(简称“VSS”)
*/
public class SjsVss {
/**
* 登录消息
*
* @return
*/
private static byte[] getLogonMsg() {
var msgTypeArr = toHH(1);
var msgLengthArr = toHH(20 + 20 + 4 + 16 + 32);
byte[] senderIDArr = getLogonBytes("VSS", 20);
byte[] targetIDArr = getLogonBytes("VDE", 20);
var xintiao = toHH(30);//心跳
byte[] mimaArr = getLogonBytes("", 16); //api模式才填, vss模式空着
byte[] xieyiArr = getLogonBytes("1.02", 32);
var msgHeadBody = byteMerger(msgTypeArr, msgLengthArr);
msgHeadBody = byteMerger(msgHeadBody, senderIDArr);
msgHeadBody = byteMerger(msgHeadBody, targetIDArr);
msgHeadBody = byteMerger(msgHeadBody, xintiao);
msgHeadBody = byteMerger(msgHeadBody, mimaArr);
msgHeadBody = byteMerger(msgHeadBody, xieyiArr);
var check = toHH(GenerateCheckSum(msgHeadBody));
var r = byteMerger(msgHeadBody, check);
return r;
}
private static byte[] hexStringToByteArr(String s) {
if (s == null || s.equals("")) {
return null;
}
s = s.replace(" ", "");
byte[] baKeyword = new byte[s.length() / 2];
for (int i = 0; i < baKeyword.length; i++) {
try {
baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
} catch (Exception e) {
e.printStackTrace();
}
}
return baKeyword;
}
/**
* 发送数据转换时按高字节序列转换
* int 转 byte[] 高字节在前(高字节序)
*
* @param n
* @return
*/
public static byte[] toHH(int n) {
byte[] b = new byte[4];
b[3] = (byte) (n & 0xff);
b[2] = (byte) (n >> 8 & 0xff);
b[1] = (byte) (n >> 16 & 0xff);
b[0] = (byte) (n >> 24 & 0xff);
return b;
}
/**
* byte数组合并
*
* @para