You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JMeter的TCP Sampler中添加STX和ETX字符作为首尾标识

解决Socket消息中STX/ETX控制字符发送问题

问题原因

你直接用字符串"\x02"和"\x03"时,这些内容会被当作普通文本字符(即\、x、0、2)发送,而非对应的ASCII控制字符(STX对应ASCII码2,ETX对应ASCII码3)。Java/JMeter不会自动解析这种C风格转义序列,导致服务器收到的是转义文本而非目标控制字符。

解决方案

方案1:JSR223 Sampler中直接构造控制字符(推荐)

在JSR223 Sampler(用Groovy或Java语言)里,通过ASCII码直接生成STX和ETX字符,再拼接成完整消息:

// 生成STX(ASCII 2)和ETX(ASCII 3)控制字符
char stx = (char) 2;
char etx = (char) 3;

// 拼接消息,保留原有换行格式
String message = stx + 
    "PLPL|WM|SL|AS|PICK|100002001|PICKORDER|I|GPick059|2025-04-30 22:05:09.00||E|N|Y||MX1|" + 
    System.lineSeparator() + 
    "GPick059|T123456001|1|JProd02|1" + 
    System.lineSeparator() + 
    etx;

// 用BinaryTCPClientImpl发送二进制消息
def tcpClient = new org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl();
tcpClient.setup("你的服务器IP", 你的端口号);
tcpClient.write(message.getBytes("UTF-8")); // 编码需和服务器保持一致

// 读取响应(按需使用)
def response = tcpClient.read();
log.info("服务器响应:" + response);

// 关闭连接
tcpClient.close();

方案2:使用JMeter TCP Sampler配置

如果用JMeter自带的TCP Sampler,按以下步骤设置:

  • 选择BinaryTCPClientImpl作为TCPClient类(它支持解析Unicode转义字符)
  • 在「Message」字段中,用Unicode转义序列\u0002表示STX,\u0003表示ETX,消息内容如下:
\u0002PLPL|WM|SL|AS|PICK|100002001|PICKORDER|I|GPick059|2025-04-30 22:05:09.00||E|N|Y||MX1|
GPick059|T123456001|1|JProd02|1\u0003

注意事项

  • 确保字符编码和服务器端一致(常用UTF-8或ASCII),避免出现乱码
  • TCPClientImpl是文本模式,不支持解析转义字符,建议优先用BinaryTCPClientImpl发送含控制字符的消息

内容的提问来源于stack exchange,提问作者g90uagk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:25:14