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得不到呀???
socket (创建SOCKET用于侦听)
bind (绑定端口)
listen (侦听这个端口)
accept (接受连接,返回一个新SOCKET用于传输)客户端
socket (创建SOCKET)
connect (连接服务器)
一个SOCKET有些类似一个文件句柄,连接一旦建立,IP,端口什么的东西就不必再管.
只需对SOCKET操作.
本机的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.
不知道我也说清楚没有. :(