簡體   English   中英

Java客戶端python服務器套接字編程

[英]Java client python server socket programming

我在Java中有一個客戶端程序,該程序將消息“ Hello”發送到python服務器。

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 version 2.7

輸出:

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

您正在從客戶端獲得“ Hello”。

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

在您編寫的Java代碼中

dout.writeUTF("Hello");

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

將Java客戶端代碼更改為

dout.writeUTF("Hello Server");

因為您從服務器端獲取的字符串的開頭有2個隱藏字符,所以在比較之前必須刪除這2個字符。

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

只需使用正確的語法即可。 由於您發送的是“ 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