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,把它放在窗体上就可以了,不需要写任何代码。
计算机上传统串口已经消失的差不多了,要么USB-串口,要么TCP透传,TCPClient 做这东西正合适,WCH有TCP-UART的芯片,网上电商上也有卖现成的转换接头做TCPServer,价钱也不贵,配套使用做工控开发比较简单实用的。