TCP Java服务器,Python客户端字符串不等于

2024-05-20 22:04:23 发布

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

我在Java服务器和Python客户机之间有一个TCP连接。 当“q”从任何发送到另一个连接时,必须关闭。 当我把'q'从python发送到java时,它就起作用了。但是,当我从java向python发送'q'时,它不起作用。我试过打字,但没用。在

Java服务器:

公共类发件人{

public static void main(String[] args) throws IOException {
    String fromclient;

    ServerSocket Server = new ServerSocket(25000);

    System.out.println("TCPServer Waiting for client on port 25000");

    while (true) {
        Socket connected = Server.accept();
        System.out.println(
                " THE CLIENT" + " " + connected.getInetAddress() + ":" + connected.getPort() + " IS CONNECTED ");

        PrintWriter out = new PrintWriter(connected.getOutputStream(), true);
        Scanner sc = new Scanner(System.in);


        while (true) {
            String input = sc.nextLine();
            out.println(input);
        }
    }

}

}

Python客户端:

^{pr2}$

print str(string_data)=='q'语句始终返回false


Tags: 服务器truenewstringserverjavaoutsystem
2条回答

您需要将Java服务器代码从out.println(input)更改为out.print(input)。还要添加一个out.flush(),以强制数据不仅在缓冲区被填满后立即发送。在

println-还将向客户端发送linebreak

使用print它可以按预期工作。在

编辑一些附加的。在这种情况下,它有助于Python客户机打印出data中的字节。在

将Python客户机代码修改为

data = client_socket.recv(4096)
for i in bytearray(data):
    sys.stdout.write(hex(i) + " ")
print

假设Java上的输入是q+ENTER。请参见下面Pathon客户端的输出。在

在Java服务器端使用out.println

^{pr2}$

在Java服务器端使用out.print

0x71
True
Connection closed

这样就很容易发现发送给客户机的额外字节(0xd 0xa)。在

我认为编码是问题所在。只要注释掉编码部分,代码就可以工作了。在

相关问题 更多 >