import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.Charset;
public class LockSocket {
<span style="white-space:pre"> </span>/** 所有报文均以utf8编码发送 */
<span style="white-space:pre"> </span>public static final Charset UTF8 = Charset.forName("UTF-8");
public static final int port =81;
/**
<span style="white-space:pre"> </span> * 1000成功表示消息已加载到推送中心
<span style="white-space:pre"> </span> * @param socketIp
<span style="white-space:pre"> </span> * @param message
<span style="white-space:pre"> </span> * @return 1000成功 1001失败
<span style="white-space:pre"> </span> */
<span style="white-space:pre"> </span>public static String sendMessage(String socketIp, String message){
<span style="white-space:pre"> </span>if(socketIp==null||message==null) return CodeConst.OPERATE_FAILURE;
<span style="white-space:pre"> </span>String[] socketInfo = socketIp.split(",");
<span style="white-space:pre"> </span>String ip = socketInfo[0];
<span style="white-space:pre"> </span>int sendPort = port;
<span style="white-space:pre"> </span>if(socketInfo.length>1){
<span style="white-space:pre"> </span>sendPort = Integer.parseInt(socketInfo[1]);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>InputStream in = null;
<span style="white-space:pre"> </span>OutputStream out = null;
<span style="white-space:pre"> </span>Socket socket = null;
<span style="white-space:pre"> </span>try{
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>/** 报文以utf-8的形式发送 */
<span style="white-space:pre"> </span>int messageLength = message.getBytes(UTF8).length;
<span style="white-space:pre"> </span>byte[] sendMessage = (String.format("%1$06d", messageLength)+message).getBytes(UTF8);
<span style="white-space:pre"> </span>socket = new Socket(ip, sendPort);
<span style="white-space:pre"> </span>/** 发送消息 */
<span style="white-space:pre"> </span>out = socket.getOutputStream();
<span style="white-space:pre"> </span>out.write(sendMessage);
<span style="white-space:pre"> </span>out.flush();
<span style="white-space:pre"> </span>/** 等待接收回执消息 */
<span style="white-space:pre"> </span>byte[] returnValue = new byte[4];
<span style="white-space:pre"> </span>in = socket.getInputStream();
<span style="white-space:pre"> </span>in.read(returnValue);
<span style="white-space:pre"> </span>return new String(returnValue);
<span style="white-space:pre"> </span>}catch(Exception e){
<span style="white-space:pre"> </span>log.error("发送推送消息失败", e);
<span style="white-space:pre"> </span>}finally{
<span style="white-space:pre"> </span>if(in!=null){
<span style="white-space:pre"> </span>try{
<span style="white-space:pre"> </span>in.close();
<span style="white-space:pre"> </span>}catch (Exception e) {
<span style="white-space:pre"> </span>// skip
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>if(out!=null){
<span style="white-space:pre"> </span>try{
<span style="white-space:pre"> </span>out.close();
<span style="white-space:pre"> </span>}catch(Exception e){
<span style="white-space:pre"> </span>// skip
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>if(socket!=null){
<span style="white-space:pre"> </span>try{
<span style="white-space:pre"> </span>socket.close();
<span style="white-space:pre"> </span>}catch (Exception e) {
<span style="white-space:pre"> </span>// skip
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return CodeConst.OPERATE_FAILURE;
<span style="white-space:pre"> </span>}
}