TCPClient TCP客户端扩展:连接TCP服务器进行文本消息通信

« 返回首页

TCPClient TCP客户端扩展

介绍

UrsAI2TcpClient 是一个 Android 扩展,用于建立与 TCP 服务器的连接,并通过 TCP 逐行交换文本消息。消息以行分隔符(CR、LF 或 CRLF)结束。

组件图标

主要功能

  • 连接到 TCP 服务器
  • 支持双向文本消息传输
  • 支持多种字符编码(US-ASCII、UTF-8、ISO-8859-1、UTF-16等)
  • 支持行分隔符配置
  • 提供连接状态监控
  • 支持多屏幕共享客户端(SharedTcpClient)

包含的组件

组件 说明
UrsAI2TcpClient 标准 TCP 客户端,适用于单屏幕应用
UrsAI2SharedTcpClient 共享 TCP 客户端,支持多屏幕共享连接

下载

.aix拓展文件:

de.ullisroboterseite.ursai2tcpclient.aix

de.ullisroboterseite.ursai2sharedtcpclient.aix

.aia示例文件:

UrsTcpClientTest.aia

UrsSharedTcpClientTest.aia

版本历史

版本 日期 修改内容
1.0 2020-11-23 初始版本
1.1 2020-12-02 添加 UrsAI2SharedTcpClient 变体
1.2 2021-01-09 修复断开连接时 Write/Writeln 的行为
1.3 2021-04-03 设置 RemotePort 默认值为 0
1.4 2021-04-16 添加 TestConnection、CrLfDelay、IgnoreTestChar
1.5 2022-10-02 添加 LocalIpAddress 和 Version 属性

工作原理

状态转换图

状态转换图

连接序列图

连接序列图

连接状态

状态值 状态名 说明
0 Disconnected 已断开连接
1 Connecting 正在连接
2 Connected 已连接
3 Disconnecting 正在断开
4 Aborted 连接中止

截图

标准客户端示例

标准客户端

标准客户端截图

共享客户端示例

共享客户端

共享客户端截图

UrsAI2TcpClient 组件参考

属性 Properties

远程地址 RemoteAddress
服务器的主机名或 IP 地址。
远程端口 RemotePort
TCP 端口号。默认值:0。
连接状态 ConnectionState
返回当前连接状态值(0-4)。
连接状态名 ConnectionStateName
返回当前连接状态的描述文本。
是否已连接 IsConnected
如果当前状态为 Connected,返回 true。
是否已断开 IsDisconnected
如果当前状态为 Disconnected 或 Aborted,返回 true。
连接超时 ConnectionTimeout
连接操作的超时时间(毫秒)。默认值:1000ms。
IO超时 IoTimeout
I/O 操作的超时时间(毫秒)。默认值:1000ms。
连接中止延迟 ConnectionAbortedDelay
连接中止后触发 DelayedConnectionAborted 事件的延迟时间(毫秒)。默认值:3000ms。
回车换行延迟 CrLfDelay
数据传输和行终止符之间的延迟时间(毫秒)。默认值:200ms。
行分隔符为CRLF LineDelimiterCrLf
设置行分隔符类型。true = CRLF (0x0D+0x0A),false = LF (0x0A)。
忽略测试字符 IgnoreTestChar
TestConnection 期间要忽略的字符代码。默认值:6(ACK)。
字符集 Charset
字符编码设置。可选值:US-ASCII、UTF-8、ISO-8859-1、UTF-16BE、UTF-16LE、UTF-16。
字符集US-ASCII Charset_USASCII
US-ASCII 字符集常量。
字符集UTF-8 Charset_UTF8
UTF-8 字符集常量。
字符集ISO-Latin-1 Charset_ISO_Latin_1
ISO-8859-1 字符集常量。
字符集UTF-16BE Charset_UTF16BE
UTF-16BE 字符集常量。
字符集UTF-16LE Charset_UTF16LE
UTF-16LE 字符集常量。
字符集UTF-16 Charset_UTF16
UTF-16 字符集常量。
本地IP地址 LocalIpAddress
返回设备的本地 IP 地址。
版本 Version
返回扩展的版本号。
最后操作 LastAction
返回最后执行的操作描述。
最后错误代码 LastErrorCode
返回最近一次错误的错误代码。
最后错误消息 LastErrorMessage
返回错误描述文本。
最后异常原因 LastExceptionCause
返回触发错误的 Java 异常文本。

状态常量

状态已断开 StateDisconnected
已断开状态常量,值为 0。
状态连接中 StateConnecting
连接中状态常量,值为 1。
状态已连接 StateConnected
已连接状态常量,值为 2。
状态断开中 StateDisconnecting
断开中状态常量,值为 3。
状态已中止 StateAborted
已中止状态常量,值为 4。

方法 Methods

连接 Connect()
使用 RemoteAddress 和 RemotePort 属性建立与服务器的连接。
连接到 ConnectTo(远程地址, 远程端口)
使用指定的地址和端口建立与服务器的连接。
断开连接 Disconnect()
关闭当前活动的连接。
写入 Write(消息)
缓冲文本数据,不添加行分隔符,不保证立即传输。
写入行 Writeln(消息)
缓冲文本数据,附加行分隔符,并强制传输。
测试连接 TestConnection(客户端ID, 延迟)
通过发送两次测试字符(带指定延迟)来验证连接状态。延迟单位为毫秒。

事件 Events

连接状态改变 ConnectionStateChanged(状态, 状态名)
当连接状态发生变化时触发。
  • State:新的状态值(0-4)
  • StateName:状态描述文本
收到消息 MessageReceived(消息)
当收到以行分隔符结尾的完整消息时触发。消息不包含行分隔符。
发生错误 ErrorOccurred(操作名称, 错误代码, 错误消息)
当操作期间发生错误时触发。
延迟连接中止 DelayedConnectionAborted()
在进入 Aborted 状态后经过 ConnectionAbortedDelay 时间后触发。可用于实现自动重连。

UrsAI2SharedTcpClient 共享客户端

共享客户端允许在多个屏幕之间共享同一个 TCP 连接。这对于需要在不同屏幕间保持连接的应用非常有用。

与标准客户端的区别

  • 连接在所有屏幕间共享
  • 只需在第一个屏幕中配置连接参数
  • 在设计器中没有属性设置(避免多实例覆盖设置)

限制

共享客户端无法在 AI 伴侣中使用。AI 伴侣不提供共享客户端所需的全部功能。必须编译成 APK 后才能测试。

错误代码

代码 含义 错误消息
0 无错误
1 无效端口 Port number is invalid.
2 连接失败 Could not connect to server.
3 未连接 Not connected to a server.
4 已连接 Already connected.
5 连接故障 Connection fault.

使用示例

基本用法

主机名配置

当 Screen1.Initialize 时
  设置 TcpClient1.RemoteAddress 为 "192.168.1.100"
  设置 TcpClient1.RemotePort 为 8083

当 Button1.Click 时
  调用 TcpClient1.Connect

当 TcpClient1.ConnectionStateChanged 时
  设置 Label1.Text 为 获取 状态名

当 TcpClient1.MessageReceived 时
  设置 Label2.Text 为 获取 消息

当 Button2.Click 时
  调用 TcpClient1.Writeln
    消息 = TextBox1.Text

事件处理说明

事件处理

事件通过 Handler.post() 执行,这意味着事件在调用代码块完成后触发,而不是立即触发。

注意事项

  1. 连接检测:Java 的 TCP 实现不会立即检测到断开的连接。要检测连接断开,需要:
    • 延迟发送行分隔符,或
    • 使用带时间间隔的测试消息交换
  2. 字符编码:发送方和接收方应使用相同的字符编码

  3. 共享客户端限制
    • 无法在 AI 伴侣中运行
    • 设计器中没有属性设置
    • 配置仅限于第一个屏幕
  4. 网络权限:应用程序需要 INTERNET 权限才能使用此扩展

  5. 配合 TCPServer 使用:此扩展可与 UrsAI2TcpServer 扩展配合使用进行测试

原文链接

原版文档:Ullis Roboter Seite - AI2 TCP Client

作者:Urs (Ullis Roboter Seite)

文档反馈