简体   繁体   English

Java客户端python服务器套接字编程

[英]Java client python server socket programming

I have a client program in java that sends a message "Hello" to python server. 我在Java中有一个客户端程序,该程序将消息“ Hello”发送到python服务器。

Java code 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 server code 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")

the problem is that java client is able to send a Hello message to the python server but in python side else statement always executes with output " Go away". 问题是Java客户端能够将Hello消息发送到python服务器,但是在python端,else语句始终执行,输出为“ Go away”。 python version 2.7

Output: 输出:

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

you are getting 'Hello' from client. 您正在从客户端获得“ Hello”。

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

In the Java code you have written 在您编写的Java代码中

dout.writeUTF("Hello");

But the Python server expects "Hello Server" to print "Hii Everyone". 但是Python服务器希望“ Hello Server”打印“ Hii Everyone”。

Change Java Client code to 将Java客户端代码更改为

dout.writeUTF("Hello Server");

因为您从服务器端获取的字符串的开头有2个隐藏字符,所以在比较之前必须删除这2个字符。

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

Just Use proper syntax. 只需使用正确的语法即可。 Since you are sending "Hello", "Go away" will be your output. 由于您发送的是“ Hello”,因此“ Go away”将是您的输出。

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM