Клиент-Сервер Socket - PullRequest
       9

Клиент-Сервер Socket

0 голосов
/ 10 октября 2018

Я пытаюсь реализовать клиентский сервер в Java, где я читаю входные данные в клиенте, выполняю UperCase на сервере, возвращаюсь к клиенту и печатаю UperCase.Я использовал ObjectOutputStream и ObjectInputStream для чтения и записи, но когда я набираю сообщение в моем клиенте, моя программа показывает мне следующие ошибки:

Digite uma msg casa java.io.EOFException at java.io.DataInputStream.readUnsignedShort (Неизвестный источник) в java.io.ObjectInputStream $ BlockDataInputStream.readUnsignedShort (Неизвестный источник) в java.io.ObjectInputStream $ BlockDataInputStream.readUTF (Неизвестный источник) в java.io.Oreadjava.Client.main (Client.java:32)

Моя клиентская сторона это:

package Client.java;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client {

    public static void main(String[] args) {

        //estabelece conexao 
        // trocar msg com o server

        try {
            //cria conexao entre  client e servidor
            Socket socket = new Socket("localhost",5558);

            //cria input and output
            ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
            ObjectInputStream input = new ObjectInputStream(socket.getInputStream());

            Scanner scan = new Scanner(System.in);
            System.out.println("Digite uma msg");
            String word = scan.nextLine();
            output.writeUTF(word);
            output.flush();
            word = input.readUTF();
            System.out.println("Upercase"+ word);

            input.close();
            output.close();
            socket.close();

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

, и это моя серверная сторона:

package Server;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.ServerSocket;

public class Servidor {

    private ServerSocket servidor;

    private void criarServerSocket(int porta) throws IOException {
        servidor = new ServerSocket(porta);
    }

    private Socket esperaConexao() throws IOException
    {
        Socket socket = servidor.accept();
        return socket;
    }

    private void fechaSocket(Socket s) throws IOException {
        s.close();
    }

    private void trataConexao(Socket socket) throws IOException {
        //*recebe e envia msg */

        try {
            ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
            ObjectInputStream input = new ObjectInputStream(socket.getInputStream());

            String msg = input.readUTF();
            output.writeObject(msg.toUpperCase());
            output.flush();

            input.close();
            output.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
        }

        fechaSocket(socket);
    }

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        Servidor server = new Servidor();
        System.out.println("Wait for a connection");
        server.criarServerSocket(5558);
        System.out.println("Conectado ");
        Socket socket = server.esperaConexao();
        server.trataConexao(socket);
    }
}

Это потому, что мой сервер закрывает поток?и как я мог это исправить и при этом закрыть поток?Спасибо за любую помощь.

1 Ответ

0 голосов
/ 10 октября 2018

вы должны использовать в Servidor

output.writeUTF(msg.toUpperCase());

, а не

output.writeObject(msg.toUpperCase());
...