本帖最后由 baronyang 于 2012-04-25 13:10:00 编辑

解决方案 »

  1.   

    你不是都说出方法了么? 
    就在DLL中发布一个共享的的Tsocketconnection 
    或者 
    var socketconnection: Tsocketconnection 全局变量
     
    function GetSocketconnection(): Tsocketconnection 
    begin
      Result:=nil;
      if not Assigned(socketconnection) then
        socketconnection:=Tsocketconnection.Create(nil);
      if not socketconnection.Connected then
      begin
        try
         socketconnection.Host:=
         socketconnection.Port:=
         socketconnection.Open;
       except
      exit;
       end;
      end;
      Result:=socketconnection;
    end;大概意思是这样 
     
      

  2.   

    这样啊 我也没试过 
    但是会产生多个连接?不是吧 
    socketconnection 
    是只创建一次
    连接一次 断线重连 怎么会产生多个连接? 不能理解
      

  3.   

    查网上的其他资源,是两个exe调用dll产生的内存空间是独立的,所以会有两个连接吧
      

  4.   


    不只lz所说连接是sktsvr到数据库的连接,还是客户端与sktsvr的socket连接?
    若是前者,只要共享数据库连接就行了。既然是共享的,若sktsvr工作在多线程模式,还要注意线程同步。
    若是后者,有几个客户端就需要几个socket连接,这是肯定的。socket就是这样的,不需奇怪。总之,跟是否封装的dll中没有关系。
      

  5.   

    我问的问题是后者,不希望多个exe产生多个sktsvr的socket连接,所以想问问有没有多个客户端共用一个sktsvr的socket连接的方法
      

  6.   

    如果 你有多台服务器 
    可在客户端保存服器IP列表,当然连接服务器时 随机连接一台服务器 负载平衡
    如果只有一台服务器 
    在服务程序中创建多个sktsvr监听不同的固定端口 
    客户端保存固定端口列表  随机连接一个服务器的端口 
      

  7.   

    我也想知道本来就是一个socket一个连接,要是能共享一个连接,关闭时sktsvr该断开那个连接? 
    或者另外写一个sktsvr ?
      

  8.   

    在widnows   32位程序中,两个应用程序的地址空间是相互没有联系的。虽然DLL在内存中是一份,但变量是在各进程的地址空间中,因此你不能借助dll的全局变量来达到两个应用程序间的数据传递,除非你用内存映像文件。 
      

  9.   

    我觉得解决的问题应该从sktsvr本身去着手,sktsvr是不是自己开发的服务程序,解决稳定性?可以通过限制客户端数量的处理。如果真的有很大的客户端数量的需求,那要确认sktsvr所在的硬件和网络环境好不好。或者你可以部署多台sktsvr在多个不同的机器上以分流。socket若走tcp模式一定是有连接的,不可能多个不同的机器连上来还用同一个连接,这说不通的,好比从上海到北京,从西安到北京,从广州到北京,他们的线路是不同的。怎么能是同一个线路呢。
      

  10.   

    http://topic.csdn.net/u/20110319/16/d8f50e80-6bdc-4b2e-a3d9-f3cfb7793484.html
    http://tech.techweb.com.cn/thread-338156-1-1.html
      

  11.   

    不是想多个不同客户电脑用一个tcp连接,我知这是不可能的,我是想现一个客户电脑上的多个exe共用一个sktsvr连接
      

  12.   

    这个方法我也试过,变量是可以,但一个tsocketconnection对象是不行的
      

  13.   

    这个你可以去看一下别人做的
    Exe + BPL + DLL 结构的程序.
      

  14.   

    建议楼主再研究一下DELPHI安装程序下的一个ScktSrvr程序
    看看是不是你那里设置出错了
      

  15.   


    如果是多个exe共享一个socket连接,就是多个不同的进程之间进行通信,只由其中的一个进程发起socket连接,要处理的就是windows IPC相关技术了。有很多可以选择,比如利用内存映射文件,利用管道,甚至仍然利用socket...
      

  16.   

    我的设置应该没错,都是sktsrv的默认设置,一台客户端多个EXE打开,在sktsvr端产生多个相同IP的连接是正常的
      

  17.   

    socketconnection 的函数 也要映射出去