Простой Java-клиент и сервер не взаимодействуют должным образом - PullRequest
0 голосов
/ 02 ноября 2010

Я не могу понять, почему код ниже не работает. Клиент отправляет сообщение на сервер, и сервер выводит сообщение на стандартный вывод.

Код для сервера:

import java.net.*;
import java.io.*;
import java.math.BigInteger;

public class server
{
    public static void main(String args[])
    {
        try
        {
            ServerSocket server = new ServerSocket(8080);

            while (true)
            {
                // initializations
                Socket connection = server.accept();
                BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                PrintWriter out = new PrintWriter(connection.getOutputStream());

                // listen for client message
                String message = in.readLine();

                // print raw message from client
                System.out.println(message);

                // close resources
                if (out != null)
                    out.close();
                if (in != null)
                    in.close();
                if (connection != null)
                    connection.close();
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
            System.exit(1);
        }
    }
}

Код для клиента:

import java.net.*;
import java.io.*;
import java.math.BigInteger;

public class client
{
    public static void main(String args[])
    {
        try
        {
            // initializations
            Socket connection = new Socket("localhost", 8080);
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            PrintWriter out = new PrintWriter(connection.getOutputStream());

            // send message to server
            out.println("Hello, world!");

            // close resources
            if (in != null)
                in.close();
            if (out != null)
                out.close();
            if (connection != null)
                connection.close();
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
            System.exit(1);
        }
    }
}

Есть идеи? Спасибо!

Ответы [ 3 ]

3 голосов
/ 02 ноября 2010

Что вы должны сделать, чтобы выяснить этот тип проблемы, это изолировать, откуда возникла проблема. Это серверная часть или клиентская часть? Простым тестом для сервера является его запуск, затем telnet к этому порту (например, «telnet 127.0.0.1 8080») введите что-нибудь и посмотрите, выводится ли он. (кстати, ваш серверный код работает нормально).

Это позволит вам сосредоточиться на своем клиентском коде. Как сказал Аффе, вы просто не удалили поток ввода. Изучение методологий поиска и устранения неисправностей кода по крайней мере так же важно, как и обучение написанию кода.

Кроме того, по соглашению, классы Java начинаются с заглавной буквы, поэтому это должны быть "Server" и "Client"

1 голос
/ 02 ноября 2010

Этот PrintWriter по умолчанию не выполняет автоматическую очистку. (и не сбрасывает на близком расстоянии, так как абстрактный писатель обманчиво может заставить вас поверить. Либо выполните:

  PrintWriter out = new PrintWriter(connection.getOutputStream(), true);

или еще

  out.println("Hello, world!");
  out.flush();
0 голосов
/ 02 ноября 2010

Добавьте сброс после записи в поток на вашем клиенте:


             // send message to server
            out.println("Hello, world!");
            out.flush();

Также убедитесь, что сокет сервера не заблокирован брандмауэром

...