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

如何用Kotlin连接并向C#编写的WebSocket程序发送消息?

使用Kotlin连接C# WebSocket服务并发送消息

下面介绍两种主流实现方式,根据你的项目场景选择即可:

方法一:使用OkHttp库推荐

OkHttp是一款轻量高效的HTTP客户端,内置WebSocket支持,写法简洁,适配Android和后端Kotlin项目。

1. 添加依赖

Gradle项目在build.gradle.kts或build.gradle中引入依赖:

// Gradle Kotlin DSL
implementation("com.squareup.okhttp3:okhttp:4.12.0")
// Gradle Groovy
implementation 'com.squareup.okhttp3:okhttp:4.12.0'

2. 编写连接与消息发送代码

import okhttp3.*
import java.util.concurrent.TimeUnit

fun main() {
    // 初始化OkHttp客户端,WebSocket无需设置读超时
    val client = OkHttpClient.Builder()
        .readTimeout(0, TimeUnit.MILLISECONDS)
        .build()

    // 构造WebSocket请求,替换为你的C#服务地址
    val request = Request.Builder()
        .url("ws://your-csharp-websocket-server-url")
        .build()

    // 实现WebSocket回调逻辑
    val listener = object : WebSocketListener() {
        override fun onOpen(webSocket: WebSocket, response: Response) {
            // 连接成功后立即发送消息
            webSocket.send("Hello from Kotlin!")
            println("连接已建立,初始消息发送完成")
        }

        override fun onMessage(webSocket: WebSocket, text: String) {
            // 处理C#服务返回的消息
            println("收到服务端消息:$text")
        }

        override fun onClosing(webSocket: WebSocket, code: Int, reason: String) {
            webSocket.close(1000, null)
            println("连接即将关闭:$reason")
        }

        override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
            println("连接失败:${t.message}")
        }
    }

    // 建立连接并阻塞主线程避免程序退出
    client.newWebSocket(request, listener)
    client.dispatcher.executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS)
}

方法二:使用标准Java WebSocket API

适合Java EE生态或需要遵循JSR-356规范的场景。

1. 添加依赖

implementation("javax.websocket:javax.websocket-api:1.1")
// 添加客户端实现(Tyrus)
implementation("org.glassfish.tyrus.bundles:tyrus-standalone-client:1.17")

2. 编写客户端代码

import javax.websocket.*
import java.net.URI

// 定义WebSocket客户端端点
@ClientEndpoint
class KotlinWsClient {
    @OnOpen
    fun onConnect(session: Session) {
        println("连接成功")
        // 发送文本消息
        session.basicRemote.sendText("Hello from Kotlin via standard WebSocket API!")
    }

    @OnMessage
    fun onReceiveMessage(message: String) {
        println("收到消息:$message")
    }

    @OnClose
    fun onClose(reason: CloseReason) {
        println("连接关闭:${reason.reasonPhrase}")
    }

    @OnError
    fun onError(error: Throwable) {
        println("出现错误:${error.message}")
    }
}

fun main() {
    // 替换为你的C#服务地址
    val serverUri = URI("ws://your-csharp-websocket-server-url")
    val container = ContainerProvider.getWebSocketContainer()
    // 建立连接
    container.connectToServer(KotlinWsClient::class.java, serverUri)
    // 保持程序运行
    Thread.sleep(Long.MAX_VALUE)
}

关键注意事项

  • 替换代码中ws://your-csharp-websocket-server-url为实际服务地址,加密连接用wss://。
  • 若为跨域场景比如Android客户端连接后端,需确保C#服务端配置了跨域允许。
  • 发送二进制消息时,OkHttp可调用webSocket.send(ByteString),标准API用session.basicRemote.sendBinary()。
  • 生产环境建议添加重连逻辑,应对网络波动导致的连接中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:50:23