Android Shell环境下WebSocket客户端请求发送问题求助
Android命令行Shell通过WebSocket请求本地服务的方法
WebSocket不是普通TCP连接,需要先完成HTTP握手,再按特定帧格式传输数据,这也是你用nc直接操作失败的原因。下面提供两种可行方案:
方案一:用wscat工具(推荐)
wscat是专门的WebSocket命令行客户端,操作简单,需先在Android上配置Node.js环境(比如用Termux):
- 安装Node.js:
pkg install nodejs - 全局安装wscat:
npm install -g wscat - 连接WebSocket服务并发送请求:
连接成功后,直接输入要发送的消息,回车就能收到服务端返回的响应体。wscat -c ws://localhost:port
方案二:手动用nc模拟WebSocket握手(适合无Node.js环境场景)
如果必须用nc,需先手动完成握手,再按WebSocket帧格式发送数据:
- 用nc连接目标端口:
nc localhost port - 输入以下握手请求(注意每一行结尾必须是
\r\n,最后留空一行):
发送后会收到服务端的握手响应,确认连接建立。GET / HTTP/1.1 Host: localhost:port Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13 - 发送数据需要按WebSocket帧格式打包(客户端发送必须带掩码),比如发送文本
"Hello",对应的十六进制帧内容是:
输入这段十六进制内容后,就能收到服务端的响应(响应帧也需要解析格式才能看到明文)。\x81\x85\x37\xfa\x21\x3d\x7f\x9f\x4d\x51\x58
注意:手动帧格式处理非常繁琐,除非必要,优先用wscat工具。
内容的提问来源于stack exchange,提问作者Dmitry Kozin
相关产品推荐
相关产品推荐

