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示例文件:
版本历史
| 版本 | 日期 | 修改内容 |
|---|---|---|
| 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() 执行,这意味着事件在调用代码块完成后触发,而不是立即触发。
注意事项
- 连接检测:Java 的 TCP 实现不会立即检测到断开的连接。要检测连接断开,需要:
- 延迟发送行分隔符,或
- 使用带时间间隔的测试消息交换
-
字符编码:发送方和接收方应使用相同的字符编码
- 共享客户端限制:
- 无法在 AI 伴侣中运行
- 设计器中没有属性设置
- 配置仅限于第一个屏幕
-
网络权限:应用程序需要 INTERNET 权限才能使用此扩展
- 配合 TCPServer 使用:此扩展可与 UrsAI2TcpServer 扩展配合使用进行测试
原文链接
原版文档:Ullis Roboter Seite - AI2 TCP Client
作者:Urs (Ullis Roboter Seite)
扫码添加客服咨询