【问题标题】:Java client python server socket programmingJava客户端python服务端socket编程
【发布时间】:2014-10-19 18:33:25
【问题描述】:

我在 java 中有一个客户端程序,它向 python 服务器发送消息“Hello”。

Java 代码

    import java.io.*;  
    import java.net.*; 
    public class MyClient {
    public static void main(String[] args) {  

    try{      
    Socket soc=new Socket("localhost",2004);  
    DataOutputStream dout=new DataOutputStream(soc.getOutputStream());  
    dout.writeUTF("Hello");
    dout.flush();
    dout.close();  
    soc.close();
    }catch(Exception e){
        e.printStackTrace();}  
    }  

Python 服务器代码

    import socket               # Import socket module

    soc = socket.socket()         # Create a socket object
    host = "localhost" # Get local machine name
    port = 2004                # Reserve a port for your service.
    soc.bind((host, port))       # Bind to the port
    soc.listen(5)                 # Now wait for client connection.
    while True:
    conn, addr = soc.accept()     # Establish connection with client.
    print ("Got connection from",addr)
    msg = conn.recv(1024)
    print (msg)
    if ( msg == "Hello Server" ):
    print("Hii everyone")
    else:
    print("Go away")

问题是 java 客户端能够向 python 服务器发送 Hello 消息,但在 python 端 else 语句总是执行输出“Go away”。python version 2.7

输出:

('Got connection from', ('127.0.0.1', 25214))
Hello
Go away

【问题讨论】:

  • Python 不理解 Java 的 writeUTF() 格式。只有 Java 的 writeUTF() 理解它。使用writeBytes()

标签: java python sockets python-2.7 if-statement


【解决方案1】:

您从客户那里得到“你好”。

if ( msg == "Hello" ):
    print("Hii everyone")
else:
    print("Go away")

【讨论】:

    【解决方案2】:

    因为你在服务器端得到的字符串开头有2个隐藏字符,所以在比较之前必须去掉这2个字符。

    if ( msg[2:] == "Hello" ):
    

    【讨论】:

    • 它适用于代码if ( msg[2:] == b"Hello" ),但隐藏的字符是什么?
    • 我不知道:D
    【解决方案3】:

    在您编写的 Java 代码中

    dout.writeUTF("Hello");
    

    但 Python 服务器希望“Hello Server”打印“Hii Everyone”。

    将 Java 客户端代码更改为

    dout.writeUTF("Hello Server");
    

    【讨论】:

      【解决方案4】:

      只需使用正确的语法。由于您发送的是“Hello”,因此“Go away”将是您的输出。

      if ( msg == "Hello Server" ):
          print("Hii everyone")
      else:
          print("Go away")
      

      【讨论】:

      • 这不是语法问题,
      【解决方案5】:

      问题是你必须在Python服务器中指定解密UTF-8,然后你应该在Java客户端使用dout.writeBytes("Hello Server")

      【讨论】:

      • UTF-8 不是加密。
      猜你喜欢
      • 2018-06-24
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多