我写了一个聊天程序,通过网关可以完全实现!但是现在要通过代理服务,我不知道怎样将二者联系起来!  以下是通过网关发送消息的函数:
 procedure TChatClient.MessageSender(ASocket: TClientWinSocket;
  const ABuffer; nBufferSize, nCommand: Integer);
{ 说明: 消息发送器 }
var
  AStream: TMemoryStream;
begin
  AStream := TMemoryStream.Create;
  try
    AStream.Write(nCommand, SizeOf(Integer));
    AStream.Write(ABuffer, nBufferSize);    AStream.Position := 0;
    ASocket.SendBuf(AStream.Memory^, AStream.Size);  finally
    AStream.Free;
  end;
end;连接到代理服务的程序(通过以下测试OK):procedure TForm1.btnConnectClick(Sender: TObject);
var
    addr:TSockAddr;
    Re:Integer;
begin
    //create socket
    skt:=socket(AF_INET,SOCK_STREAM,0);
    if(skt=INVALID_SOCKET)then
    begin
        StatusBar1.SimpleText:='Error:Create socket failed!';
        exit;
    end;
    //connect to host
    ZeroMemory(@addr,sizeof(addr));
    addr.sin_family :=AF_INET;
    addr.sin_addr.S_addr :=inet_addr(Pchar(edtHost.Text));
    //Finger use #79 port
    addr.sin_port:=htons(StrToInt(edtPort.Text));
    Re := connect(skt,addr,sizeof(addr));
    if(Re<>0)then
    begin
         StatusBar1.SimpleText:='Connect to server failed';
         exit;
    end;
    //Success Connect to host
    StatusBar1.SimpleText:='Connect to server Success';
end;
其中的 skt:TSocket;
通过代理发消息的:procedure TForm1.btnSendClick(Sender: TObject);
var
    Info:string;    Re:Integer;
begin
    //send message
    GetMem(BufSend,1024);
    ZeroMemory(BufSend,1024);
    Info:=edtSend.Text;
    StrPCopy(BufSend,Info);
    Re:=send(skt,BufSend^,Length(BufSend),0);
    if(Re=SOCKET_ERROR)then
    begin
         StatusBar1.SimpleText:='Send Data Failed';
         exit;
    end;
    FreeMem(BufSend);
end;现在我想:为了修改少量的代码:希望将通过代理的连接赋予网关的连接,这样一来只需一个赋值的过程,岂不美哉!可是我的网关的发送函数要传递参数:ASocket: TClientWinSocket,
而代理得到的是skt:TSocket;我如何做呢????