readLine является нулевым в программировании сокета - PullRequest
0 голосов
/ 10 июня 2018

Я работаю над программой сокета java-сервера, и in.readLine () из BufferedReader имеет значение null.Я попытался успешно отладить программу, но не смог найти, почему BufferedReader in.readline () продолжает возвращать ноль в обоих классах.

package clientserver;  

import java.io.*;  
import java.net.*;  
import java.util.logging.Level;  
import java.util.logging.Logger;  
/**  
*  
* @author carsongedeus  
*/  

Класс клиента

public class Client {

    public static void main(String[] args) throws IOException {

        try {
            InetAddress iA = InetAddress.getLocalHost();
            String hostAddr = iA.getHostAddress();
            String inputLine;
            int portNumber = 5001;

            Socket socket = new Socket(hostAddr, portNumber);
            Socket is instantiated and data should be read in ASCII encoding
            try (BufferedReader in = new BufferedReader(new 
                InputStreamReader(socket.getInputStream(), "US-ASCII"))) {
                System.out.println("Echo from client: " + in.readLine());

                PrintWriter out = new PrintWriter(new 
                OutputStreamWriter(socket.getOutputStream()), true);
                out.write("Message from client: " + socket.getInetAddress());

                while((inputLine = in.readLine()) != null) {
                    System.out.println(inputLine);
                }
            }
        } catch (IOException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

ПРОБЛЕМА: in.readLine равно нулю, но должно быть строковым значением.
Поскольку условие в строке выше не является истинным,цикл while не может начинаться / происходить.

package clientserver;

import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author carsongedeus
*/

Класс сервера

public class Server implements Runnable {

    private final ServerSocket serverSocket;

    public Server(String hostAddr, int portNumber) throws IOException {
        serverSocket = new ServerSocket(portNumber);
        serverSocket.setSoTimeout(60000);
    }

    @Override
    public void run() {

        try {
            Socket socket = this.serverSocket.accept();
            System.out.println("Connected to " + socket.getInetAddress() + 
                    " on port " + socket.getLocalPort());

            try (BufferedReader in = new BufferedReader(new 
            InputStreamReader(socket.getInputStream(), "US-ASCII"))) {
            System.out.println("Echo from client: " + in.readLine());

                PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
                out.write("Message from server: " + socket.getInetAddress());
            }
        } catch (IOException ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String[] args) throws IOException {

        InetAddress iA = InetAddress.getLocalHost();
        String hostAddr = iA.getHostAddress();
        int portNumber = 5001;

        Server server = new Server(hostAddr, portNumber);

        Thread t = new Thread(server);
        t.setDaemon(false);
        t.start();
    }
}

Запуск потока с использованием метода run

...