TCP-сервер не получает сообщение от TCP-клиента (Java) - PullRequest
0 голосов
/ 23 ноября 2018

Похоже, сервер не получает сообщение, отправленное клиентом, как должно.Насколько я понимаю, клиент пишет в выходной поток сокета.И сервер читает из входного потока сокета.Пожалуйста, помогите.

Код сервера:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
static final int DEFAULT_PORTNUMBER = 1236;

public static void main(String[] args){
    int portnumber;

    if(args.length >= 1){
        portnumber = Integer.parseInt(args[0]);
    }else{
        portnumber = DEFAULT_PORTNUMBER;
    }

    //Setting a server socket and a possible client socket
    ServerSocket server = null;
    Socket client;

    try{
        server = new ServerSocket(portnumber);
    } catch (IOException e){
        e.printStackTrace();
    }
    while(true){

        try{
            System.out.println("Waiting for client...");
            client = server.accept();
            System.out.println("Client accepted... ");
            //Read data form the client
            BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));

            while(!br.ready()){
                System.out.println("No message from client");
            }
            String msgFromClient = br.readLine();
            //System.out.println("Message received from client = " + msgFromClient);

            //Send Response
            if(msgFromClient != null && !msgFromClient.equalsIgnoreCase("bye")){
                OutputStream clientOut = client.getOutputStream();
                PrintWriter pw = new PrintWriter(clientOut, true);
                String ansMsg = "Hello, " + msgFromClient;
                pw.println(ansMsg);
            }

            if(msgFromClient != null && msgFromClient.equalsIgnoreCase("Bye")){
                server.close();
                client.close();
                break;
            }
        } catch(IOException e) {
            e.printStackTrace();
        }
        //New thread for client
        /*new ServerThread(client).start();
        System.out.println("Client connection accepted... ");*/
    }

}
}

Код клиента:

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;


public class TCPClient {
static final int DEFAULT_PORTNUMBER = 1236;
public static void main(String args[]){
    Socket client = null;
    int portnumber;

    //Default port number if not specified as an argument

    if(args.length >= 1){
        portnumber = Integer.parseInt(args[0]);
    }else{
        portnumber = DEFAULT_PORTNUMBER;
    }


    try {
        String msg = "";

        //Creating a client socket
        client = new Socket(InetAddress.getLocalHost(), portnumber);
        System.out.println("Client socket is created: " + client);

        //Creating an output stream for the client socket
        OutputStream clientOUt = client.getOutputStream();
        PrintWriter pw = new PrintWriter(clientOUt, true);

        //Creating an input stream for the client socket
        InputStream clientIn = client.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(clientIn));

        //Creating a buffered reader for standard input System.in
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Enter your name. Type Bye to exit.");

        //Read data from standard input and write to output stream
        msg = stdIn.readLine().trim();
        pw.print(msg);

        while(!br.ready()){
            //System.out.println("No Input From Server");
        }
        //Read data from input stream of client socket
        System.out.println("Message returned from the server = " + br.readLine());

        pw.close();
        br.close();
        client.close();

        //Stop operation
        if (msg.equalsIgnoreCase("Bye")) {
            System.exit(0);
        } else {
        }

    } catch (IOException e) {
        System.out.println("I/O error " + e);
    }



}
}

Примечание. Я отключил брандмауэр, но это не помогло.

1 Ответ

0 голосов
/ 23 ноября 2018

Найден ответ PrintWriter или любой другой выходной поток в Java не знает "\ r \ n" .Описывает, как printwriter не выполняет корректную очистку с printwriter.print (), а работает только при использовании printwriter.println ().

...