金
金鱼
Unregistered / Unconfirmed
GUEST, unregistred user!
急急急!! 在线等! ClientSocket 指定本机的端口号后(8001) 传送完文件后再连接提示 (10048 Address already in use.) 。能不能传送完文件后,ClientSocket.close 时 发出指令取消 8001端囗绑定 ( 积分: 100 )<br />我用 ServerSocket 和 ClientSocket 作了一个文件传输的东东,考虑到防火墙的限制,ClientSocket 在发送文件的时候 指定本机的端囗号(8001)。传送完文件后 clientsocket.close; 为什么 后再连接提示 (10048 Address already in use.) 能不能传送完文件后,ClientSocket.close 时 发出指令取消 8001端囗绑定。
8001端囗绑定代码
---------------------------------------------------
procedure TForm1.ClientSocket1Lookup(Sender: TObject;
Socket: TCustomWinSocket);
var
SockAddrIn: TSockAddrIn; //uses winsock
iRc:Integer;
begin
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_addr.S_addr := 0;
SockAddrIn.sin_port := htons(8001); //要绑定的端口
iRc:=bind(ClientSocket1.Socket.SocketHandle, SockAddrIn, sizeof(TSockAddrIn));
if iRc= 0 then
memo1.Lines.Add('绑定成功 8001 !')
else
memo1.Lines.Add(Format('%d',[WSAGetLastError()]));
end;
---------------------------------------------------
而为什么,如果 ClientSocket 用系统自动寻找的端囗 ClientSocket.close时 就可以立即释放端囗。 而采用指定的端囗时 ClientSocket.close 时就不能释放端囗。
注: (c 和 s 可能放在一个机器上也可能放在两台机器上,我不想通过关闭 s 的方式来达到关闭端囗的目的。)
8001端囗绑定代码
---------------------------------------------------
procedure TForm1.ClientSocket1Lookup(Sender: TObject;
Socket: TCustomWinSocket);
var
SockAddrIn: TSockAddrIn; //uses winsock
iRc:Integer;
begin
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_addr.S_addr := 0;
SockAddrIn.sin_port := htons(8001); //要绑定的端口
iRc:=bind(ClientSocket1.Socket.SocketHandle, SockAddrIn, sizeof(TSockAddrIn));
if iRc= 0 then
memo1.Lines.Add('绑定成功 8001 !')
else
memo1.Lines.Add(Format('%d',[WSAGetLastError()]));
end;
---------------------------------------------------
而为什么,如果 ClientSocket 用系统自动寻找的端囗 ClientSocket.close时 就可以立即释放端囗。 而采用指定的端囗时 ClientSocket.close 时就不能释放端囗。
注: (c 和 s 可能放在一个机器上也可能放在两台机器上,我不想通过关闭 s 的方式来达到关闭端囗的目的。)