HarmonyOS鸿蒙Next中ArkTS使用WebSocket连接报错{"code":200,"data":"0"}

HarmonyOS鸿蒙Next中ArkTS使用WebSocket连接报错{“code”:200,“data”:“0”}

import webSocket from '@ohos.net.webSocket';
import { BusinessError } from '@kit.BasicServicesKit';

export class WebSocketManager {
  private ws: webSocket.WebSocket = webSocket.createWebSocket();
  private messageCallback?: (data: string) => void;

  constructor(params: string) {
    this.setupEventListeners();
//ccUserId 为服务器约定的必传参数。
    this.ws.connect('ws://183.6.145.89:9081', { header: { ccUserId: params } }, (err: BusinessError) => {
      if (err) {
        console.log(JSON.stringify(err), '连接失败');
      } else {
        console.log('连接成功,等待响应...');
      }
    });
    // this.ws.connect('ws://183.6.145.89:9081?ccUserId='+params,(err: BusinessError,val:boolean)=>{
    //     if(err){
    //       console.log(JSON.stringify(err),'连接失败');
    //     }else {
    //       console.log(err+'连接成功');
    //     }
    //   })
  }

  private setupEventListeners() {
    this.ws.on('open', (err: BusinessError) => {
      console.log(JSON.stringify(err), 'WebSocket连接信息');
    });

    this.ws.on('message', (err: BusinessError, data: string | ArrayBuffer) => {
      if (!err) {
        console.log(data as string, 'addMessage');
        if (this.messageCallback) {
          this.messageCallback(data as string)
        }
      } else {
        console.log(err + 'errerr');
      }
    });
    this.ws.on('close', () => {
      console.log('连接已关闭');
    });
    
    this.ws.on('error', (err: BusinessError) => {
      console.error('WebSocket错误', JSON.stringify(err));
    });
  }

  // 设置消息接收回调
  public onMessage(callback: (data: string) => void): void {
    this.messageCallback = callback;
  }

  // 关闭连接
  public close(): void {
    this.ws.close({ code: 1000, reason: '正常关闭' }, (err: BusinessError) => {
      if (!err) {
        console.log('连接已关闭');
      }
    });
  }
}

运行时this.connect 输出 为连接成功,等待响应…

但是服务器报错WebSocket错误 {“code”:200,“data”:“0”}

cke_7535.png

IOS端使用的也是类似方法调用 能正常交互

cke_3439.png


更多关于HarmonyOS鸿蒙Next中ArkTS使用WebSocket连接报错{"code":200,"data":"0"}的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

楼主手机端系统版本多少?

更多关于HarmonyOS鸿蒙Next中ArkTS使用WebSocket连接报错{"code":200,"data":"0"}的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中使用ArkTS连接WebSocket时,收到{"code":200,"data":"0"}表示连接已成功建立。该状态码对应WebSocket标准协议中的正常连接确认,通常无需额外处理。若后续通信异常,请检查服务端消息格式或网络稳定性。

根据你提供的错误信息 {"code":200,"data":"0"},这通常是WebSocket连接建立后服务器返回的特定响应,而不是标准的连接错误。在HarmonyOS Next的ArkTS中,WebSocket连接成功但服务器返回此数据,可能表示服务器端对连接参数或协议有特定要求。

检查你的代码,注意到在connect方法中使用了header传递ccUserId,但服务器可能期望该参数通过查询字符串(如注释中的替代方案)或其他方式传递。由于iOS使用类似方法可以正常工作,建议对比两端实际发送的请求细节,确保参数传递方式一致。

另外,确认网络权限已在module.json5中正确声明:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ]
  }
}

如果问题持续,使用抓包工具(如Wireshark)对比HarmonyOS和iOS端的WebSocket握手阶段,查看请求头差异,特别是ccUserId的传递方式。

回到顶部