📄 emppsocket.java
字号:
package cn.madhouse.gateway.empp.service;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import cn.madhouse.gateway.empp.msgformat.*;
import cn.madhouse.gateway.empp.util.*;
public class EmppSocket implements Cloneable {
private boolean isConnect = false;
private int connectCount = 0;
private Socket socket;
private DataInputStream in;
private DataOutputStream out;
private String accountId = "555518833";
private String pwd = "151206";
private String host = "211.136.163.68";
private int port = 9981;
private int timeout = 10000;
private int version = 0x10;
public String getAccountId() {
return accountId;
}
public String getHost() {
return host;
}
public int getPort() {
return port;
}
public void setAccountId(String accountId) {
this.accountId = accountId;
}
public void setHost(String host) {
this.host = host;
}
public void setPort(int port) {
this.port = port;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public void setVersion(int version) {
this.version = version;
}
private boolean connect() throws UnknownHostException, IOException, InterruptedException {
if(socket==null || socket.isClosed()) {
socket = new Socket(host, port);
socket.setSoTimeout(timeout);
}
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
int timestamp = Integer.parseInt(EmppUtil.getTimeStamp());
ConnectRequest connectRequeset = new ConnectRequest(accountId,pwd,version,timestamp);
write(connectRequeset.toByte());
byte[] conRespB = new byte[37];
read(conRespB);
if(Message.getCommandId(conRespB) == Message.EMPP_CONNECT_RESP) {
ConnectResponse connectResp = new ConnectResponse(conRespB);
System.out.println("connectResp = " + connectResp.getStatus());
if(connectResp.getStatus()==0 || connectResp.getStatus()==2000) {
keepAlive();
isConnect = true;
return true;
}
}
close();
isConnect = false;
return false;
}
public void reConnect() {
connectCount ++;
System.out.println("try " + accountId + " socket " + connectCount +" connecting ...... " + host + ":" + port);
try {
close();
} catch (IOException e1) {
e1.printStackTrace();
reConnect();
}
try {
isConnect = connect();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if(!isConnect) {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
reConnect();
}
reConnect();
} else System.out.println(accountId + " socket connect successful!!!");
}
}
public boolean isConnect() {
return isConnect;
}
public void close() throws IOException {
if(in != null) in.close();
if(out != null) out.close();
if(socket!=null && socket.isConnected()) socket.close();
//System.out.println(accountId + " pool." + poolPos + " socket is closed!!!");
}
public void read(byte[] b) {
synchronized(in) {
try {
in.read(b);
} catch (IOException e) {
e.printStackTrace();
isConnect = false;
reConnect();
}
}
}
public void write(byte[] b) {
synchronized(out) {
try {
out.write(b);
} catch (IOException e) {
e.printStackTrace();
isConnect = false;
reConnect();
}
}
}
private void keepAlive() {
new ActiveRequest(this).start();
}
public EmppSocket cloneSelf() throws InstantiationException, IllegalAccessException {
EmppSocket emppSocket = EmppSocket.class.newInstance();
emppSocket.setAccountId(accountId);
emppSocket.setHost(host);
emppSocket.setPort(port);
emppSocket.setPwd(pwd);
emppSocket.setTimeout(timeout);
emppSocket.setVersion(version);
return emppSocket;
}
class ActiveRequest extends Thread {
private EmppSocket emppSocket;
ActiveRequest(EmppSocket emppSocket) {
this.emppSocket = emppSocket;
}
@Override
public void run() {
while(true) {
try {
sleep(60*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ActiveTestRequest activeReq = new ActiveTestRequest();
emppSocket.write(activeReq.toByte());
}
}
}
public static void main(String[] atrg ) {
/* SocketS ss=new SocketS(9981);
try {
ss.getServerSocket().accept();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}*/
DataInputStream in = null;
DataOutputStream out = null;
EmppSocket emppSocket = new EmppSocket();
emppSocket.pwd = "151206";
//emppSocket.host = "192.168.3.207";
//emppSocket.host = "192.168.3.71";
emppSocket.host = "211.136.163.68";
emppSocket.port = 9981;
Socket socket;
try {
socket = new Socket(emppSocket.host, emppSocket.port);
socket.setSoTimeout(1000000);
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String accountId = "555518833";
String pwd = "151206";
int timestamp = Integer.parseInt(getDate());
int version = 0x10;
ConnectRequest conReq = new ConnectRequest(accountId,pwd,version,timestamp);
/*StringBuilder sb = new StringBuilder();
byte[] bytes = conReq.toByte();
for(byte b:bytes){
int temp=0x000f&((int)b);
sb.append(Integer.toHexString(temp));
}
System.out.println(sb.toString());
System.out.println(bytes.length);*/
try {
out.write(conReq.toByte());
byte[] bin = new byte[100];
in.read(bin);
int commandId = Message.getCommandId(bin);
if(commandId==Message.EMPP_CONNECT_RESP) {
ConnectResponse conResp = new ConnectResponse(bin);
System.out.println("Status=" + conResp.getStatus());
if(conResp.getStatus()==0) {
byte[] msgId = null;
Integer pkTotal = 1;
Integer pkNumber = 1;
Integer registeredDelivery = 1;
Integer msgFmt = 15;
String valIdTime = "070106000000000R";
String atTime = "070105000000000R";
Integer destUsrtl = 1;
String destTerminalId = "13916065149";
Integer msgLength = 10;
String msgContent = "种花人名共和国晚碎4";
String msgSrc = null;
String srcId = "55551883311";
String serviceId = "555518833";
//String serviceId = "91158";
SubmitRequest subReq = new SubmitRequest(msgId,pkTotal,pkNumber,registeredDelivery,msgFmt,
valIdTime,atTime,destUsrtl,destTerminalId,msgLength,msgContent,msgSrc,srcId,serviceId);
out.write(subReq.toByte());
byte[] bin2 = new byte[100];
in.read(bin2);
SubmitResponse submitResp = new SubmitResponse(bin2);
System.out.println("msgID=" + Tools.byteArrayToHexString(submitResp.getMsgId()));
System.out.println("result=" + submitResp.getResult());
/*
int msgSize=in.readInt();
int msgCommandID=in.readInt();
int msgSequenceID=in.readInt();
byte[] resp = new byte[msgSize-12];
in.read(resp, 0, msgSize - 12);
System.out.println(msgSize+"####"+msgCommandID+"####"+msgSequenceID);
System.out.println(Tools.byteArrayToHexString(resp));*/
byte[] bin3 = new byte[500];
in.read(bin3);
System.out.println(Tools.byteArrayToHexString(bin3));
commandId = Message.getCommandId(bin3);
if(commandId==Message.EMPP_DELIVER) {
DeliverRequest moRequest = new DeliverRequest(bin3);
System.out.println("destId = " + moRequest.getDestId());
System.out.println("srcId = " + moRequest.getSrcTerminalId());
System.out.println("msgLen = " + moRequest.getMsgLength());
System.out.println("msgContnet = " + moRequest.getMsgContent());
System.out.println("serviceId = " + moRequest.getServiceId());
System.out.println("linkId = " + moRequest.getLinkId());
if(moRequest.getRegisteredDelivery()==1) {
DeliverReport deliverR = new DeliverReport(bin3);
System.out.println("msgId2= " + Tools.byteArrayToHexString(deliverR.getMsgId2()));
System.out.println("stat= " + deliverR.getStat());
System.out.println("submitTime= " + deliverR.getSubmitTime());
System.out.println("doneTime= " + deliverR.getDoneTime());
System.out.println("destTerminalId= " + deliverR.getDestTerminalId());
System.out.println("sequenceId2= " + deliverR.getSequenceId2());
}
}
}
} else {
if(commandId==Message.EMPP_DELIVER) {
DeliverRequest moRequest = new DeliverRequest(bin);
System.out.println("serviceId = " + moRequest.getServiceId());
System.out.println("destId = " + moRequest.getDestId());
System.out.println("srcId = " + moRequest.getSrcTerminalId());
System.out.println("msgLen = " + moRequest.getMsgLength());
System.out.println("msgContnet = " + moRequest.getMsgContent());
System.out.println("linkId = " + moRequest.getLinkId());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static String getDate(){
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("MMddHHmmss");
return sdf.format(date);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -