问题,先看部分代码如下
  JavaSock jSock = new JavaSock();
CSock sock,sock1;
int eid = jSock.JavaSock_EpollCreate(ftp);
ParseMsgInface userInterface = getUmcToSp_Group(); sock = jSock.JavaSock_ServListen(eid, meip, meport, userInterface,
ftp);
if (sock == null) {
logger.info("无法创建本地" + meip + ":" + meport + "监听服务!");
//System.out.println("无法创建本地" + meip + ":" + meport + "监听服务!");
return;
}
jSock.JavaSock_close(sock); sock1 = jSock.JavaSock_ConnectTo(meip, toip, toport, ftp); if (sock1 == null) {
logger.info("无法连接到" + toip + ":" + toport);
 //System.out.println("无法连接到" + toip + ":" + toport);
return;
}
   其中jSock和 Csock对象下的方法都是c实现的,我无法控制。现在的问题关键是,这个是使用与web中调用。我想要的是,它不是随着服务启动而实例化。而是调用时实例化。    我希望第一次调用之后,sock会被创建,此后由于端口被占用,无法重复创建,如何在第一次调用创建之后,它会一直存在,无需在创建。从创建时开始直到web服务的生命结束。我任何时候都可以直接用.

解决方案 »

  1.   

    可以尝试用一个单例的类,来专门负责管理该JavaSock,并对提供发送信息的public函数。类似于它是一个专业的“传达室”。
      

  2.   


    具体代码怎么弄啊,我弄了单态实例,好像没用。
    private static JavaSock jSock = new JavaSock();
    private SP2UMC_GroupOp_Ack opobj;
    private boolean opready = false;

    private static UmcToSp_Group umcspgroup = null;
    private static CSock Csock_s =null;
    private static CSock Csock_c=null;

    //创建本地监听的单态实例
    public static synchronized CSock getCSock_s(int eid, String meip, int meport, 
    ParseMsgInface userInterface, boolean prtlTcp) { if (Csock_s == null) {
    Csock_s =jSock.JavaSock_ServListen(eid, meip, meport, userInterface,
    prtlTcp);
    }
    return Csock_s;
    } //UmcToSp_Group的单态实例
    public static synchronized UmcToSp_Group getUmcToSp_Group() { if (umcspgroup == null) {
    umcspgroup = new UmcToSp_Group() { };
    }
    return umcspgroup;
    } public void umcgroup(boolean ftp, UMC2SP_GroupOp m_UMC2SP_GroupOp,
    String meip, String toip, int meport, int toport) {

    long start=System.currentTimeMillis();

    UMCFarther m_UMCFarther = new UMCFarther();
    /*
     * boolean tp=ture; if(ftp!=null){ tp=ftp; }
     */

    CSock sock_s,sock_c;
    int eid = jSock.JavaSock_EpollCreate(ftp);
    ParseMsgInface userInterface = getUmcToSp_Group();// sock_s = jSock.JavaSock_ServListen(eid, meip, meport, userInterface,
    // ftp);
    sock_s=getCSock_s(eid, meip, meport, userInterface,
    ftp);
    // if (sock == null) {
    //
    // System.out.println("无法创建本地" + meip + ":" + meport + "监听服务!");
    // return;
    // }
    //jSock.JavaSock_close(sock);
    long end1=System.currentTimeMillis();

    System.out.println("到创建服务"+"####:"+(end1-start));
    sock_c = jSock.JavaSock_ConnectTo(meip, toip, toport, ftp); if (sock_c == null) {
    long end=System.currentTimeMillis();

    System.out.println("无法连接到" + toip + ":" + toport+"####:"+(end-start));
    return;
    }
      

  3.   


    要打成jar包来用的,不能spring吧?
      

  4.   


    是我错了,在简单的java小project的测试类里,发挥不了单例的功能。在web里,这个就发挥作用了。