TCP通信:
用indy控件时,由于client本地port不能自己定而是由控件程序自己分配一个,而且自己不好改,因此是双
向通信时可以用udp双向通信的方法每个界面上放一个client,一个server.可以看下indy的demo
客户端:
IdTCPClient1.Host := edServer.Text;
IdTCPClient1.Port := sePort.Value;
try
idtcpclient1.Connect(1000);
except
on E: Exception do MessageDlg ('Error while connecting:'+#13+E.Message, mtError,
[mbOk], 0);
end;
idtcpClient1.WriteBuffer (CommBlock, SizeOf (CommBlock), true);//commblock为自定义的记录
服务器端:
idtcpserver1.DefaultPort :=strtoint(edit1.Text);
idtcpserver1.Active :=true;
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);//只在连接时执行一次
var
clientDNS:string;
begin
clientDNS:=AThread.Connection.LocalName ;
memo1.Lines.Add(clientDNS+'connected');
end;
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);//监听
begin
AThread.Connection.ReadBuffer (CommBlock, SizeOf(CommBlock));
memo1.Lines.Add(commblock.MyUserName +':'+ commblock.Msg ) ;
end;
----------------------------------------------------------------------------------------------------------------------
udp客户端发送数据,服务器接收数据。
客户端设置如下
IdUDPClient1.Host:= ;
IdUDPClient1.Port:= 8888;
IdUDPClient1.ReceiveTimeout:= 10;
IdUDPClient1.Send();
服务器设置如下:
IdUDPServer1.Bindings.DefaultPort:=8888;
IdUDPServer1.Active:= True;
并通过下面程序得到数据:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
DataStringStream: TStringStream;
s: String;
begin
DataStringStream := TStringStream.Create('');
try
DataStringStream.CopyFrom(AData, AData.Size);
mem1.Lines.Add('Received "' + DataStringStream.DataString + '" from ' +
ABinding.PeerIP + ' on port ' + IntToStr(ABinding.PeerPort));
// ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s[1], Length(s));//回执通信
mem1.Lines.SaveToFile('c:/3.txt');
finally
DataStringStream.Free;
end;
end;