在一台机器里设有多个IP地址时,要ServerSocket只在特定的IP上侦听。

解决方案 »

  1.   

    看看他的源码,他真正用来实现套接字的部分是TCustomWinSocket,看他的构造函数,constructor TCustomWinSocket.Create(ASocket: TSocket);
    begin
      inherited Create;
      Startup;
      FSocketLock := TCriticalSection.Create;
      FASyncStyles := [asRead, asWrite, asConnect, asClose];
      FSocket := ASocket;
      FAddr.sin_family := PF_INET;
      FAddr.sin_addr.s_addr := INADDR_ANY;//注意这一句  FAddr.sin_port := 0;
      FConnected := FSocket <> INVALID_SOCKET;
    end;
    上面的
     FAddr.sin_addr.s_addr := INADDR_ANY
    中的INADDR_ANY允许服务器应用监听主机计算机上面每个网络接口上的客户机活动。一般情况
    下,在该地址绑定套接字和本地接口时,网络应用才利用这个地址来监听连接。如果你有一
    个多址系统,这个地址就允许一个独立应用接受发自多个接口的回应。
    如果你要自己指定IP地址,
    这么写
    FAddr.sin_addr.S_addr := inet_addr(pchar('192.168.1.3'));关键点就是在这里,具体怎么实现,自己好好看看他的源码,如果觉得改起来不方便,那就用win sock  API直接做,其实就那么几个api函数
      

  2.   

    其实你可以试一下socketconnection,指定ip地址,
    socketconnection。ipaddress:= 192.168.*.*
      

  3.   

    在绑定的时候设置sin_addr.s_addr应该就可以吧
      

  4.   

    强烈同意wudi_1982的说法,Delphi自带的那些控件在socket上都不咋的,还是自己用API做吧