Почему я не получаю никаких сообщений от моего TCP-сервера и клиента? - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь реализовать TCP-сервер и клиент на Java. Клиент должен отправить сообщение на Сервер, а Сервер должен отправить то же сообщение обратно Клиенту. Я получаю связь между обоими, но нет никакого сообщения. Я уже много искал в Интернете, и мой код настолько похож на другой код, но мое решение все еще не работает. Я довольно новичок в этой теме, поэтому я рад каждому совету. Вот мой код клиента:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class Client 
{
    public static void main(String[] args) 
    {
    final int PORT = 5000;
    Socket socket = null;
    try
    {
        socket = new Socket("localhost", PORT);
        OutputStream os = socket.getOutputStream();
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
        String message = "Hello World";
        bw.write(message);
        bw.flush();

        InputStream is = socket.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String echo = br.readLine();
        System.out.println(echo);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        try
        {
        socket.close();
        } catch (IOException e)
        {
        e.printStackTrace();
        }
    }
    }
}

Код сервера:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server
{
    public static void main(String[] args)
    {
        final int PORT = 5000;
        ServerSocket serverSocket = null;
        Socket socket = null;
        try
        {
            serverSocket = new ServerSocket(PORT);
            socket = serverSocket.accept();
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new 
            InputStreamReader(is));
            String message = br.readLine();
            System.out.println(message);
            OutputStream os = socket.getOutputStream();
            BufferedWriter bw = new BufferedWriter(new 
            OutputStreamWriter(os));
            bw.write("ECHO: " + message);
            bw.flush();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                serverSocket.close();
            } catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }



    }
}

1 Ответ

0 голосов
/ 11 мая 2018

Это потому, что вы используете readLine() для получения сообщения, и вы никогда не завершаете сообщение концом строки .

Добавьте новую строку в ваше сообщение, и метод readLine () увидит ее и вернет вам значение. String message = "Hello World\n";

Обратите внимание, что у вас будет такая же проблема на обратном пути, потому что вы также используете readLine() на клиенте. Добавьте новую строку в ответ сервера: bw.write("ECHO: " + message + '\n');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...