Saya memiliki aplikasi sederhana yang membuat soket antara Java (server) dan python (klien). Fungsi utama dari kode python adalah untuk mengambil data dari pengguna dan mengirimkannya ke server (kode java)

Ini kode pythonnya

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("localhost", 5000))

while True:
    data = input("Enter data to send : ")
    if(data == 'q'):
        break

    client_socket.sendall(data.encode('utf-8'))

client_socket.close()

Dan ini kode javanya

    String fromclient;

    ServerSocket Server = new ServerSocket (5000);


    while(true) 
    {
        Socket connected = Server.accept();
        BufferedReader inFromClient = new BufferedReader(new InputStreamReader (connected.getInputStream()));
        fromclient = inFromClient.readLine();

        if ( fromclient.equals("q") ){
                connected.close();
                break;
            }else {
              System.out.println(fromclient);
         }
    }

Ketika saya menulis teks apa pun dan mengklik Enter, tidak ada yang masuk ke kode Java dan tidak ada yang dicetak ke konsol, tetapi ketika saya mengirim 'q' dari python, kode python ditutup dan semua data yang saya tulis sekarang dicetak di konsol Java. Saya tidak tahu apa alasannya, dan bagaimana saya bisa memperbaikinya.

0
iosamammohamed 24 November 2017, 20:00

1 menjawab

Jawaban Terbaik

Kode Java menunggu jeda baris, tetapi bagian Python tidak mengirimkannya (input tidak memberikan jeda baris dalam string yang dikembalikannya).

Mencoba

client_socket.sendall((data+'\n').encode('utf-8'))

accept BufferedReader
Socket connected = Server.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader (connected.getInputStream()));
while(true) 
{
    fromclient = inFromClient.readLine();

Akan menjadi urutan yang lebih baik.

Juga, klien Python tidak mengirim 'q' dalam bentuknya saat ini. Jadi if dengan fromclient.equals("q") tidak akan menutup soket, kode hanya akan mati pada readLine() berikutnya. Pesan ulang bagian Python juga:

data = input("Enter data to send : ")
client_socket.sendall((data+'\n').encode('utf-8'))

if(data == 'q'):
    break
1
tevemadar 24 November 2017, 17:20