2016-03-29 12 views
1

JavaサーバーとPythonクライアントの間にTCP接続があります。 'q'がいずれかの接続から他の接続に送信される場合は、接続を閉じる必要があります。 Pythonからjavaに 'q'を送ると動作します。しかし、私がJavaからPythonに 'q'を送ったとき、それは動作しません。私は型キャストを試みましたが、使用しませんでした。TCP Javaサーバー、Pythonクライアント文字列が等しくない

のJavaサーバー:

パブリッククラスのSender {

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クライアント:常に

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
client_socket.connect(("localhost", 25000)) 
while True: 
    r, _, _ = select.select([client_socket], [], []) 
    if r: 
     data = client_socket.recv(4096) 
     string_data = data.decode('utf-8') 
     print str(string_data) == 'q' 
     if str(string_data) == 'q' or string_data == 'Q': 
      print ('Connection closed') 
      client_socket.close() 
      break 
     else: 
      print (string_data) 

文の印刷STR(string_data)== 'Q'偽を返します

答えて

2

Javaサーバーのコードをout.println(input)からout.print(input)に変更する必要があります。さらにout.flush()を追加すると、バッファがいっぱいになった後だけでなく、データがすぐに送信されるようになります。

printlnは - も期待どおりに動作しますprintでクライアント

に改行を送信します。

編集一部追加。このような場合、Pythonクライアントはバイトをdataに出力するのに役立ちます。

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

は、Java上の入力がq+ENTERで想定としてPythonクライアントコードを改正。以下のPathonクライアント側の出力を参照してください。 Javaサーバ側のJavaサーバサイドout.print

0x71 
True 
Connection closed 

にそれがクライアントに送信された追加バイト(0xd 0xa)を見つけるのは簡単だその方法を使用してout.println

0x71 0xd 0xa 
False 
q 

を使用して

-1

私はエンコーディングが問題だと思います。エンコード部分をコメントアウトするだけで、コードが機能するはずです。

+0

まだ同じ問題 –

+0

は、エンコーディングがUTF-8 – Shiva

+0

に同じものを使用し、次いで、標準的な符号化エイリアスを確認お願いします。 –

関連する問題