如何用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
相关产品推荐
相关产品推荐

