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

📄 synsocket.java

📁 短信开发汇总
💻 JAVA
字号:


/**
 * <p>Title: smsproc</p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: </p>
 *
 * @author vienna
 * @version 1.0
 */
import java.net.*;
import java.io.*;
import java.util.*;
import java.text.SimpleDateFormat;
import java.text.*;

public class SynSocket {
    Socket socket=null;
    DataOutputStream out=null;
    DataInputStream in=null;
    static SimpleDateFormat f=new SimpleDateFormat("MMddHHmmss");
    Date d=new Date();

    public SynSocket() {
        super();
    }
    public DataOutputStream getDataOutputStream(){
        return out;
    }
    /*连接短消息网关*/
    public int ConnectServer(){
        if(GlobalVar.getLocalIP().equals("")){
            GlobalVar.WriteSysLog("Synsocket","ConnectServer","local ip address err",0);
            return -1;
        }
        if(GlobalVar.getGatewayIP().equals("")){
            GlobalVar.WriteSysLog("Synsocket","ConnectServer","gateway ip address err",0);
            return -1;
        }
        if(GlobalVar.getLocalPort()==0){
            GlobalVar.WriteSysLog("Synsocket","ConnectServer","local port address err",0);
            return -1;
        }
        if(GlobalVar.getGatewayPort()==0){
            GlobalVar.WriteSysLog("Synsocket","ConnectServer","gateway port address err",0);
            return -1;
        }
        try{
            InetAddress serverAddr=InetAddress.getByName(GlobalVar.getGatewayIP());
            InetAddress localAddr=InetAddress.getByName(GlobalVar.getLocalIP());
            socket=new Socket(serverAddr,GlobalVar.getGatewayPort(),localAddr,GlobalVar.getLocalPort());
        }
        catch(Exception ex){
            GlobalVar.WriteSysLog("Synsocket","ConnectServer",ex,0);
            return -1;
        }
        if(socket==null){
            GlobalVar.WriteSysLog("SynSocket","ConnectServer","new operation return null",0);
            return -1;
        }
        try{
            out=new DataOutputStream(socket.getOutputStream());
         //   System.out.print(out+"111111111111111111\n");
        }
        catch(Exception ex){
            GlobalVar.WriteSysLog("SynSocket","ConnectServer",ex,0);
            return -1;
        }
        if ( out == null ){
            GlobalVar.WriteSysLog("Synsocket","ConnectServer","out is null",0);
            return -1;
        }
        try {
            in = new DataInputStream(socket.getInputStream());
            System.out.print("in: "+in+"\n");
        }
        catch (Exception ex) {
            GlobalVar.WriteSysLog("Synsocket","ConnectServer",ex,0);
            return -1;
        }
        if ( in == null ){
            GlobalVar.WriteSysLog("Synsocket","ConnectServer","in is null",0);
            return -1;
        }
        return 0;
    }
    /*向短消息网关发送数据*/
    public int FlushOutputData(){
        try{
            out.flush();
        }
        catch(Exception ex){
            GlobalVar.WriteSysLog("Synsocket","FlushOutputData",ex,GlobalVar.SYSTEM_BASE_ERROR_0);
            return -1;
        }
        return 0;
    }
    /*设置SOCKET读取数据超时setsotimeout*/
    public int setSoTimeout(int seconds){
        try{
            socket.setSoTimeout(seconds * 1000);
        }
        catch(Exception ex){
            GlobalVar.WriteSysLog("Synsocket","setsotimeout",ex,GlobalVar.SYSTEM_BASE_ERROR_0);
            return -1;
        }
        return 0;
    }
    /*从短消息网关接收数据*/
    public int synRecvData(DataBuffer buffer){
        int len=0;
        for(;;){
            if(buffer.getBufferLen() < 4){
                try{
                    System.out.print("synRecvData:"+buffer.getBufferLen()+"\n");
                    len = in.read(buffer.getBuffer(),buffer.getBufferLen(),buffer.getBuffer().length-buffer.getBufferLen());
                  System.out.print("eee"+len+"\n");
                }
                catch(java.io.InterruptedIOException ex){
                    GlobalVar.WriteSysLog("Synsocket","synRecvData",ex,GlobalVar.SYSTEM_BASE_ERROR_0);
                }
                catch(Exception ex){
                    GlobalVar.WriteSysLog("Synsocket","synRecvData",ex,GlobalVar.SYSTEM_BASE_ERROR_0);
                    return -1;
                }
                if(len==-1||len==0){
                    GlobalVar.WriteSysLog("Synsocket","SynRecvData","first read data len is -1",GlobalVar.SYSTEM_BASE_ERROR_0);
                    return -1;
                }
                len=len+buffer.getBufferLen();
                buffer.setBufferLen(len);
                if(len<4){
                    continue;
                }
            }
            int PacketLen=0;
            DataInputStream data=new DataInputStream(new ByteArrayInputStream(buffer.getBuffer()));
        //    int PacketLen=0;
            try{
                PacketLen=data.readInt();
                System.err.println(PacketLen+"mmmmmmmmmmmmmmmm\n");
            }
            catch(Exception ex){
                GlobalVar.WriteSysLog("Synsocket","synRecvData",ex,GlobalVar.SYSTEM_BASE_ERROR_0);
                return -1;
            }
            if(PacketLen >= 1000 || PacketLen <= 0){
                GlobalVar.WriteSysLog("Synsocket","synRecvData","packet len err",GlobalVar.SYSTEM_BASE_ERROR_0);
                return -1;
            }
            if(buffer.getBufferLen() < PacketLen){
                try{
                    len=in.read(buffer.getBuffer(),buffer.getBufferLen(),buffer.getBuffer().length-buffer.getBufferLen());
                }
                catch(java.io.InterruptedIOException ex){
                    GlobalVar.WriteSysLog("Synsocket","synRecvData",ex,GlobalVar.SYSTEM_BASE_ERROR_0);
                }
                catch(Exception ex){
                    GlobalVar.WriteSysLog("Synsocket","synRecvData",ex,GlobalVar.SYSTEM_BASE_ERROR_0);
                    return -1;
                }
                if(len==-1 || len==0){
                    GlobalVar.WriteSysLog("Synsocket","synRecvData","first read data len is -1",GlobalVar.SYSTEM_BASE_ERROR_0);
                    return -1;
                }
                len=len+buffer.getBufferLen();
                buffer.setBufferLen(len);
                if(len<PacketLen){
                    continue;
                }
            }
            if(buffer.processBuffer(PacketLen)!=0){
                return -1;

            }

            return 0;
        }
    }
    /*关闭连接*/
    public int CloseSocket(){
        try{
            if(out!=null){
                out.close();
            }
            if(in !=null){
                in.close();
                in=null;
            }
            if(socket!=null){
                socket.close();
                socket=null;
            }
        }
        catch(Exception ex){
            GlobalVar.WriteSysLog("Synsocket","CloseSocket",ex,GlobalVar.SYSTEM_BASE_ERROR_0);
        }
        return 0;
    }
    /*登陆短消息网关*/
    public int LoginSGIP(int LoginType,ErrorCode err){
        int ret;
        if(err==null){
            GlobalVar.WriteSysLog("Synsocket","LoginSGIP","error code can't be null!",GlobalVar.SYSTEM_BASE_ERROR_0);
            return -1;
        }
        ret=ConnectServer();
        if(ret!=0){
            err.setErrorCodeString("连接服务器失败!");
            err.setErrorCodeValue(20);
            return -1;
        }


        String str=f.format(d);
        String s=new String("3057190123"+str);
        System.err.print(s+"\n");
        byte b[]=s.getBytes();
        int x=(d.getMonth()+1)*0x5f5e100+d.getDate()*0xf4240+d.getHours()+10000+d.getMinutes()*100+d.getSeconds();

        System.err.println(Integer.toHexString(x)+"  "+Integer.toHexString(x).length()+"  "+x+"  "+s.length()+"\n");
        SGIP_Bind bind=new SGIP_Bind();
        bind.head.PacketLength=bind.Length();
        bind.head.RequestID=GlobalVar.ID_SGIP_BIND;
        bind.head.Seq1=390123;
        bind.head.Seq2=x;
        bind.head.Seq3=GlobalVar.getSequenceNo();
        bind.LoginType=(byte)LoginType;
        bind.LoginName=GlobalVar.getUsername().getBytes();
        bind.LoginPassword=GlobalVar.getPassword().getBytes();
        String xx="";
        bind.Reserve=xx.getBytes();
        ret=bind.WriteProtocolData(out);
        System.err.print("eeee"+bind.head.PacketLength+"  "+ GlobalVar.ID_SGIP_BIND+"  "+LoginType+"  "+ByteUtility.bytesToStr(bind.LoginName)+"  "+ByteUtility.bytesToStr(bind.LoginPassword)+"  "
                         +ByteUtility.bytesToStr(bind.Reserve)+"  "+out.size()+"\n");
        if(ret!=0){
            err.setErrorCodeString("1发送登陆消息失败!");
            CloseSocket();
            return -1;
        }
        ret=FlushOutputData();
        if(ret!=0){
            err.setErrorCodeString("2发送登陆消息失败!");
            CloseSocket();
            return -1;
        }
        DataBuffer buffer=new DataBuffer();
        System.err.print("dddv  "+buffer.getBufferLen()+"  mmmmmnnnnnnnnnnnjjjjjjjjjjj\n");
        ret=setSoTimeout(50);
        if(ret!=0){
            err.setErrorCodeString("设置timeout失败!");
            CloseSocket();
            return -1;
        }
        ret=synRecvData(buffer);
        if(ret!=0){
            err.setErrorCodeString("接收登陆响应失败!");
            CloseSocket();
            return -1;
        }
        SGIP_BindResp bind_resp=new SGIP_BindResp();
        ret=bind_resp.parseBuffer(buffer.getRecvBuffer());
        if(ret!=0){
            err.setErrorCodeString("收到登陆响应格式错误!");
            CloseSocket();
            return -1;
        }
        System.out.print(bind_resp.getCommandID()+"mmmmm\n");
        if(bind_resp.getCommandID()!=GlobalVar.ID_SGIP_BIND_RESP){
            err.setErrorCodeString("收到的消息不是bind_resp!");
            CloseSocket();
            return -1;
        }
        if(bind_resp.getResult()!=0){
            err.setErrorCodeString("收到失败的登陆响应,状态值="+Integer.toString(bind_resp.getResult()));
            CloseSocket();
        }
        return bind_resp.getResult();
    }
    private byte[] getAuthen(String TimeStamp){
        MD5 md5=new MD5();
        byte[] SevenBytes=new byte[7];
        for(int i=0;i<7;i++){
            SevenBytes[i]=0x00;
        }
        String md5in=GlobalVar.getUsername()+new String(SevenBytes)
                     +GlobalVar.getPassword()+TimeStamp;
        return md5.calcMD5(md5in);
    }
    protected void finalize(){
        CloseSocket();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -