Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接到Python WebSocket时发生Ktor格式错误的输入异常_Python_Kotlin_Websocket_Ktor - Fatal编程技术网

连接到Python WebSocket时发生Ktor格式错误的输入异常

连接到Python WebSocket时发生Ktor格式错误的输入异常,python,kotlin,websocket,ktor,Python,Kotlin,Websocket,Ktor,我正在尝试组织python服务器和kotlin客户端之间的websocket连接。作为websockets库,我使用websockets和ktor。我编写了两个简单的测试应用程序。所以,当我试图从服务器获取响应文本时,我得到一个格式错误的InputException。由于调试过程,我使用NodeJS编写了简单的websocket服务器,它工作正常。 我想我在编码方面有问题,但不知道如何解决 Python服务器 import asyncio import websockets from webso

我正在尝试组织python服务器和kotlin客户端之间的websocket连接。作为websockets库,我使用websockets和ktor。我编写了两个简单的测试应用程序。所以,当我试图从服务器获取响应文本时,我得到一个格式错误的InputException。由于调试过程,我使用NodeJS编写了简单的websocket服务器,它工作正常。 我想我在编码方面有问题,但不知道如何解决

Python服务器

import asyncio
import websockets
from websockets import WebSocketServerProtocol

class Server:

    async def __respond(self, client: WebSocketServerProtocol, message: str):
        print(message)
        await client.send(message)

    async def ws_handler(self, client: WebSocketServerProtocol, uri: str) -> None:
        async for message in client:
            await self.__respond(client, message)

server = Server()
start_server = websockets.serve(server.ws_handler, '127.0.0.1', 4000)
loop = asyncio.get_event_loop()
loop.run_until_complete(start_server)
loop.run_forever()
科特林客户机

client.ws(
            method = HttpMethod.Get,
            host = "127.0.0.1",
            port = 4000,
            path = "/ws",
            request = {
                header("Sec-WebSocket-Extensions", "permessage-deflate")
            }
        ) {
            send(Frame.Text("message"))

            for (frame in incoming) {
                when (frame) {
                    is Frame.Text -> println(frame.readText())
                    is Frame.Binary -> println(String(frame.readBytes(), StandardCharsets.UTF_8))
                    else -> println("error")
                }
            }
        }
科特林·斯塔克特拉克

io.ktor.utils.io.charsets.MalformedInputException: Input length = 1
    at io.ktor.utils.io.charsets.CharsetJVMKt.throwExceptionWrapped(CharsetJVM.kt:325)
    at io.ktor.utils.io.charsets.CharsetJVMKt.decode(CharsetJVM.kt:199)
    at io.ktor.utils.io.charsets.EncodingKt.decode(Encoding.kt:103)
    at io.ktor.utils.io.charsets.EncodingKt.decode$default(Encoding.kt:101)
    at io.ktor.http.cio.websocket.FrameCommonKt.readText(FrameCommon.kt:146)
    at com.veronica.service.Client$run$3.invokeSuspend(Client.kt:33)
异常在“is Frame.Text->println(Frame.readText())”行抛出

Ktor版本为1.6.0,要使其正常工作,请安装:

并删除设置
Sec WebSocket Extensions
标题的代码:

request = {
    header("Sec-WebSocket-Extensions", "permessage-deflate")
}
request = {
    header("Sec-WebSocket-Extensions", "permessage-deflate")
}