⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emppsocket.java

📁 移动empp网关
💻 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 + -