Java客户端与Python服务器的套接字编程
我有一个用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客户端能够成功发送“Hello”消息到Python服务器,但在Python这边,else语句总是会执行,输出“Go away”。python版本 2.7
输出结果:
('Got connection from', ('127.0.0.1', 25214))
Hello
Go away
5 个回答
-1
问题是你需要在Python服务器中指定解密时使用UTF-8编码,然后在Java客户端中使用dout.writeBytes("Hello Server")
来发送数据。
-1
只需要使用正确的语法。因为你发送的是“Hello”,所以你的输出将是“Go away”。
if ( msg == "Hello Server" ):
print("Hii everyone")
else:
print("Go away")
0
在你写的Java代码中
dout.writeUTF("Hello");
但是Python服务器希望当你发送“Hello Server”时,它会打印出“Hii Everyone”。
把Java客户端的代码改成
dout.writeUTF("Hello Server");
1
因为你在服务器端得到的字符串开头有两个隐藏的字符,所以在进行比较之前,你必须先把这两个字符去掉。
if ( msg[2:] == "Hello" ):
4
你从客户端收到了'Hello'。
if ( msg == "Hello" ):
print("Hii everyone")
else:
print("Go away")