为什么我的kotlin客户端应用程序不能与python服务器连接?

2024-09-29 05:30:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python套接字服务器正在运行,但是当我尝试通过我的移动应用程序(用kotlin编写)连接时,它不会建立连接,它会给我“IllegalStateException”异常。这里有什么问题? 下面是python代码:

import socket
import threading
import command_handler

PASSWORD = "abcd"
HEADER = 64
PORT = 5050
IP = socket.gethostbyname(socket.gethostname())
ADDR = (IP, PORT)
FORMAT = 'utf-8'

def authenticate(conn):
    inPass = recieveMessage(conn)
    userID = recieveMessage(conn)
    if inPass != PASSWORD:
        print("Connection not coming from within the app, closing...")
        return False, None
    return True, userID

def sendMessage(msg,conn):
    message = msg.encode('utf-8')
    messageLength = len(message)
    sendLength = str(messageLength).encode(FORMAT)
    sendLength += b' ' * (HEADER-len(sendLength))
    conn.send(sendLength)
    conn.send(message)

def recieveMessage(conn):
    msgLength = conn.recv(HEADER).decode(FORMAT)
    msgLength = int(msgLength)
    msg = conn.recv(msgLength).decode(FORMAT)
    return msg

def handler(conn,addr):
    auth, userID = authenticate(conn)
    if not auth:
        conn.close()
    command = recieveMessage(conn)
    command_handler.executeCommand(command, userID, conn)


def start():
    print(f"Starting a server on : {IP}:{PORT}")
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(ADDR)
    server.listen()

    while True:
        conn, addr = server.accept()
        thread = threading.Thread(target=handler, args=(conn, addr))
        thread.start()

这是Kotlin代码:

private fun sendLength(msg: String): String
{
    var message = msg
    while (message.length < 64)
    {
        message += " "
    }
    return message
}

private fun sendMessage(msg: String, user: String, password: String)
{
    try {
        val client = Socket("127.0.0.1", 5050)

        var messageByteArray = msg.toByteArray()
        var messageLength = messageByteArray.size
        var messageSendLength = sendLength(messageLength.toString())

        var userByteArray = user.toByteArray()
        var userLength = userByteArray.size
        var userSendLength = sendLength(messageLength.toString())

        var passwordByteArray = user.toByteArray()
        var passwordLength = userByteArray.size
        var passwordSendLength = sendLength(messageLength.toString())

        Log.d("konekcije", "Sending Message: $msg" + "User: $user" + "Password: $password")

        client.getOutputStream().write(messageSendLength.toByteArray())
        client.getOutputStream().write(messageByteArray)
        client.getOutputStream().write(userSendLength.toByteArray())
        client.getOutputStream().write(userByteArray)
        client.getOutputStream().write(passwordSendLength.toByteArray())
        client.getOutputStream().write(passwordByteArray)

        client.close()
    }
    catch (IllegalStateException: Exception)
    {
        Log.d("conn", "No connections")
    }

}

我做了一些实验,结果似乎失败了 我做错了什么? 先谢谢你


Tags: clientmessagestringservervardefmsgsocket