我写了一个聊天程序,通过网关可以完全实现!但是现在要通过代理服务,我不知道怎样将二者联系起来! 以下是通过网关发送消息的函数:
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;我如何做呢????
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货