Мой клиент Java не работает с моим сервером Python - PullRequest
0 голосов
/ 05 июня 2019

Я создаю Java-клиент и Python-сервер, они оба работают нормально, когда я запускаю их с соответствующими языковыми клиентами / сервером, но когда я запускаю Java-клиент с Python-сервером, сокеты соединяются, но терминал Java получает застрял всякий раз, когда я пытаюсь прочитать данные, отправленные с сервера Python

Вероятно, это проблема буферизации, потому что всякий раз, когда я вызываю буфер с данными, полученными от python, терминал просто застревает в указанной строке и не сдвигается с места.

Вот сервер Python:

import socket
import pyautogui
def main():
    HOST = ""              # Endereco IP do Servidor
    PORT = 1234            # Porta que o Servidor esta
    tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    orig = (HOST, PORT)
    tcp.bind(orig)
    tcp.listen(1)
    while True:
        con, cliente = tcp.accept()
        print ('Concetado por', cliente)
        cone="Conectado".encode()
        con.send(cone)
        while True:
            msg = con.recv(1024).decode()
            if msg[0]=="/" :
                cmsg=''
                for i in range(1,len(msg)):
                    cmsg+=msg[i]
                exec(cmsg)
            if not msg: break
            print (cliente, msg)
        print ("Finalizando conexao do cliente", cliente)
        con.close()
main()

Вот Java:

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class MyClient {
    public static void main(String[] args) {

        try {
            Socket soc = new Socket("localhost", 1234);
            DataOutputStream dout = new DataOutputStream(soc.getOutputStream());
            OutputStreamWriter osw = new OutputStreamWriter(dout);
            BufferedWriter bw = new BufferedWriter(osw);
            InputStream is = soc.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            System.out.println("Here");
            System.out.println(br.readLine());
            System.out.println("Here2");
            Scanner scanner = new Scanner(System.in);
            while (!(bw.readLine().equals("exit"))) {
                System.out.println(br.readLine());
                String input = scanner.nextLine();
                bw.write(input);
                bw.flush();
            }
            dout.close();
            soc.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

1 Ответ

0 голосов
/ 06 июня 2019

Так что я на самом деле выяснил, что не так, проблема была в буфере, который, по-видимому, не понимал, что линия закончилась, поэтому для ее решения мне просто нужно было отправить "Conectado\n'

...