delphi的TcpClient控件,连接上其他程序(如VB、VC)的TCP控件后VB的LocalPort=Delphi的RemotePort那么VB的WinSock会自动随机分配一个VB的RemotePort端口;之后VB的WinSock程序给这个RemotePort端口发送消息,但是Delphi的Client如何捕获到这个RemotePort端口。不知道我说得清楚不!就是说Delphi的TCP控件现在分成了Client、Server两个。使用Clinet和VB连接通后,只能给对方程序发送消息。而VB是随机分配RemotePort端口的;要想使VB给Delphi发送消息,必须让Delphi获取本机的LocalPort端口。请问,一旦Client连接上后如何得到本机的LocalPort??使用Client.LocalPort得不到呀???

解决方案 »

  1.   

    楼主不能什么都凭经验和感觉啊..SOCKET连接建立的几步骤是到处有都文章和书籍介绍啊.服务端
    socket  (创建SOCKET用于侦听)
    bind    (绑定端口)
    listen   (侦听这个端口)
    accept   (接受连接,返回一个新SOCKET用于传输)客户端
    socket (创建SOCKET)
    connect (连接服务器)
    一个SOCKET有些类似一个文件句柄,连接一旦建立,IP,端口什么的东西就不必再管.
    只需对SOCKET操作.
      

  2.   

    看得不是很明白.. 
    本机的localport 可以通过对方的SOCKET取得. 俺不知VB里是怎么搞得.DELPHI:
    SERVERSOCKET:
      listen: xxx:123  (假设服务端的侦听端口为123)
    CLIENTSOCKET:
      CLIENTSOCKET1.ADDRESS:=XXX;
      CLIENTSOCKET1.REMOTEPORT:=123;
      CLIENTSOCKET1.ACTIVE:=TRUE; (连接Server)
    ServerSocket OnConnect事件.
      socket.RemoteAddress (连接我的IP-->client)
      Socket.RemotePort (连接我的端口)
    注意:此socket就是与client连接对话的SOCKET.你可以保存它, 并随时可以来一句socket.sendbuff()就可将消息发给此client. 不用记得它的IP和PORT.
    只要明确服务端的PORT(侦听端口),好让CLIENT对连接它,而系统分配的对话端口只是系统对网络连接的表现,可以按SOCKET连接信息来通讯,不一定要知道CLIENT的REMOTEPORT.
    不知道我也说清楚没有. :(
     
      

  3.   

    请问你说的SERVERSOCKET是哪个控件,我怎么没有找到??是Indy的TCP,还是Internet里边的TCPserver???
      

  4.   

    我说的是D6下的,D7里面类似的是Internet里边的TCPserver,或者INDY里的TCP(大家都认为这个是比较好),但使用上比较复杂(用的是线程),我认为SERVERSOCKET与SOCKET API比较接近。