Lazarus上好用的 Indy TCP client 组件

Indy组件功能强大,Delphier们再清楚不过了,它的 Lazarus 版本一样优秀。

步骤:

1、窗体上放上  IdTCPClient1

2、设置IP和端口,及超时

      Var  lTCPPort;

      IdTCPClient1.Host:= Form1.Edit1.Text;
      lTCPPort:= StrToInt(Form1.Edit2.Text);
      IdTCPClient1.Port:= lTCPPort;
      IdTCPClient1.ConnectTimeout:= 5000;
 

3、打开端口

      if not IdTCPClient1.Connected then
         try
            IdTCPClient1.Connect;
         except  
         end;

3、发送字符串

var sStr: String;

IdTCPClient1.IOHandler.WriteLn(sStr); 

可能遇到的问题:

Indy 这东西是阻塞式的,在 Unix/Linux 上用没问题,但在windows上用会出问题 --- 屏幕有时被‘冻’上了(Lazarus 是跨平台的,android, ios, macos, linux, solaris, win32, win64, wince都能用,所谓的一套代码到处编译)。

解决办法:

IdTCPClient1.ConnectTimeout:= 5000;
这个东西会影响屏幕,超时值小了对卫星链路和国际互联网链路等传输时不利,5000有点夸张,但3000还是要的,也就是3秒。如果是在国内用或在局域网中用,取值300毫秒也就足够了。总之,超时时间会影响屏幕刷新。解决的办法很简单,Indy 套件里有另外一个 Component 叫 IdAntiFreeze,把它放在窗体上就可以了,不需要写任何代码。

Lazarus上好用的 Indy TCP client 组件_第1张图片

 

计算机上传统串口已经消失的差不多了,要么USB-串口,要么TCP透传,TCPClient 做这东西正合适,WCH有TCP-UART的芯片,网上电商上也有卖现成的转换接头做TCPServer,价钱也不贵,配套使用做工控开发比较简单实用的。

你可能感兴趣的:(开发语言,物联网,lazarus,Indy,TCPClient,AntiFreeze)