TCP/UDP通信

 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值