TCPServer TCP服务器扩展:在Android设备上创建TCP服务器

« 返回首页

TCPServer TCP服务器扩展

介绍

此扩展使 TCP 客户端能够与另一台 Android 设备建立连接,并通过 TCP 逐行交换文本消息。消息以行分隔符(CR、LF 或 CRLF)结束。服务器接受客户端连接,一旦建立连接就可以进行双向数据传输。

TCP服务器示意图

主要功能

  • 在 Android 设备上创建 TCP 服务器
  • 接受多个客户端连接
  • 支持双向文本消息传输
  • 支持多种字符编码(US-ASCII、UTF-8、ISO-8859-1、UTF-16等)
  • 支持行分隔符配置

下载

.aix拓展文件:

de.ullisroboterseite.ursai2tcpserver.aix

.aia示例文件:

TCPServerTest.aia

版本历史

版本 日期 修改内容
1.0 2021-04-15 初始版本
1.1 2024-01-14 添加 StopClient() 方法

截图

应用界面

应用界面

详细截图

详细截图

参考

属性 Properties

已连接客户端数 ConnectedClients
返回当前已连接的客户端数量。
回车换行延迟 CrLfDelay
数据传输和行终止符之间的延迟时间(毫秒)。默认值:200ms。
忽略测试字符 IgnoreTestChar
TestConnection 期间要忽略的字符代码。默认值:6(ACK)。
IO超时 IoTimeout
I/O 操作的超时时间(毫秒)。默认值:1000ms。
是否运行中 IsRunning
返回服务器的运行状态。
行分隔符为CRLF LineDelimiterCrLf
设置行分隔符类型。true = CRLF (0x0D+0x0A),false = LF (0x0A)。
本地主机 LocalHost
返回服务器的本地 IP 地址。
本地端口 LocalPort
用于接受客户端连接的端口号。
网卡列表 NICList
返回所有已配置的 IPv4 网络接口地址列表。
字符集 Charset
字符编码设置。可选值:US-ASCII、UTF-8、ISO-8859-1、UTF-16BE、UTF-16BL、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-16BL Charset_UTF16BL
UTF-16BL 字符集常量。
字符集UTF-16 Charset_UTF16
UTF-16 字符集常量。
最后操作 LastAction
返回最后执行的操作描述(例如 “Start”)。
最后错误代码 LastErrorCode
返回最近一次错误的错误代码。
最后错误消息 LastErrorMessage
返回错误描述文本。
最后异常原因 LastExceptionCause
返回触发错误的 Java 异常文本。

方法 Methods

启动 Start()
启动服务器。如果服务器已在运行,将重新启动。
停止 Stop()
终止服务器操作。
获取客户端ID列表 GetClientIDs()
返回所有已连接客户端 ID 的列表。
停止客户端 StopClient(客户端ID)
断开指定客户端的连接。
写入 Write(客户端ID, 消息)
为指定客户端缓冲文本,不保证立即传输。
写入行 Writeln(客户端ID, 消息)
缓冲文本,附加行分隔符,并强制传输。
测试连接 TestConnection(客户端ID, 延迟)
通过发送两次测试字符(带指定延迟)来验证连接状态。延迟单位为毫秒。

事件 Events

服务器已启动 ServerStarted()
当服务器成功启动时触发。
服务器已停止 ServerStopped(错误代码)
当服务器停止时触发。如果 ErrorCode > 0,表示由于错误而停止。
客户端已连接 ClientConnected(客户端ID, 客户端IP)
当新客户端连接时触发。
客户端已断开 ClientDisconnected(客户端ID, 客户端IP)
当客户端断开连接时触发。
收到消息 MessageReceived(客户端ID, 消息)
当从客户端收到以行分隔符结尾的消息时触发。
发生错误 ErrorOccurred(操作名称, 错误代码, 错误消息)
当操作期间发生错误时触发。

使用示例

示例项目功能

“URS TCP Server Test” 应用程序演示了以下功能:

  • 创建一个监听端口 8083 的 TCP 服务器
  • 接受客户端连接
  • 从客户端接收文本消息
  • 以 “Echo “ 前缀加收到的文本作为响应
  • 可通过 UrsAI2TcpClient 扩展进行测试

基本用法

  1. 在设计器中添加 TCPServer 组件
  2. 设置 LocalPort 属性(例如 8083)
  3. 在屏幕初始化时调用 Start() 方法启动服务器
  4. 使用 MessageReceived 事件处理收到的消息
  5. 使用 Writeln() 方法向客户端发送响应

代码示例

当 Screen1.Initialize 时
  调用 TCPServer1.Start

当 TCPServer1.ServerStarted 时
  设置 Label1.Text 为 "服务器已启动"

当 TCPServer1.ClientConnected 时
  设置 Label1.Text 为 连接("客户端已连接: ", 获取 客户端IP)

当 TCPServer1.MessageReceived 时
  调用 TCPServer1.Writeln
    客户端ID = 获取 客户端ID
    消息 = 连接("Echo ", 获取 消息)

当 TCPServer1.ErrorOccurred 时
  设置 Label1.Text 为 获取 错误消息

注意事项

  1. 端口设置:确保所选端口未被其他应用程序占用
  2. 网络权限:应用程序需要 INTERNET 权限才能使用此扩展
  3. 防火墙:确保设备的防火墙允许指定端口的入站连接
  4. 客户端ID:每个连接的客户端都有唯一的 ID,用于标识和通信
  5. 字符编码:发送方和接收方应使用相同的字符编码

错误代码

常见错误代码说明:

错误代码 说明
0 无错误
> 0 发生错误,查看 LastErrorMessage 获取详细信息

原文链接

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

作者:Urs (Ullis Roboter Seite)

文档反馈