简体   繁体   English

Java IO套接字未发送输出流

[英]Java IO socket not sending outputstream

When debugging my code, the code stops here: 当调试我的代码时,代码在这里停止:

while (( msg = reader.readLine())  != null) {
        writer.write("From server: " + msg);
}

I am sending input from a client class, but I can't figure out where I am wrong, since the server never receives the message. 我正在从客户端类发送输入,但是由于服务器从未收到该消息,所以我无法弄清楚哪里出错了。

Here is my entire sever class: 这是我的整个服务器班:

    import java.io.*;
import java.net.*;


public class Server {

    private BufferedReader reader;
    private PrintWriter writer;
    private int port;

    public Server(int port)
    {
        this.port = port;
    }

    private String getSeverAddress() {      
        String host = null;
        try {
            InetAddress adr = InetAddress.getLocalHost();
            host = adr.getHostAddress();

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

        return host;
    }

    public void startServer() {

        print("Contact this sever on address: " + getSeverAddress() + " port: " + port);

        ServerSocket ss = null; 
        Socket socket = null;

        try {
            ss = new ServerSocket(port);
            socket = ss.accept();

            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            writer = new PrintWriter(socket.getOutputStream(), true);

            String msg = null;

            while (( msg = reader.readLine())  != null) {
                writer.write("From server: " + msg);
                print(msg);

                if(msg.toLowerCase().equals("Bye")) {
                    print("Client left");
                    break;
                }
            }

            ss.close();
            socket.close();
            reader.close();
            writer.close();

        } catch(SocketException e) {
            e.printStackTrace();            
        } catch (IOException i ) {
            i.printStackTrace();
            return;
        }
    }       

    private void print(String msg) {
        System.out.println(msg);
    }

    public static void main(String[] args) {

        Server server = new Server(1111);
        server.startServer();

    }

}

And here is the client class: 这是客户端类:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;


public class Client {

    private Socket client;
    private BufferedReader reader;
    private PrintWriter writer;

    public Client(Socket socket)
    {
        client = socket;

        try{
            reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            writer = new PrintWriter(client.getOutputStream(), true);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void writeToServer() {       
        print("Write message to server");

        String msg = null;

        try {
            while((msg = reader.readLine()) != null) {
                writer.write("From client: " + msg);
                print(msg);

                if(msg.toLowerCase().equals("quit")) {
                    break;
                }
            }

            reader.close();
            writer.close();

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

    }

    private void print(String msg) {
        System.out.println(msg);
    }

    public static void main(String[] args) {
        Socket socket = null;

        try {
            socket = new Socket("localhost", 1111);

        } catch (Exception e) {
            e.printStackTrace();
        } 

        Client client = new Client(socket);
        client.writeToServer();
    }

}

Your mistake is server and client both sending/receiving messages background without printing anything. 您的错误是服务器和客户端都在不打印任何内容的情况下发送/接收消息。 Like when you send message from client, Server received it and again write to the client and it become infinite loop. 就像当您从客户端发送消息时,服务器接收到该消息并再次写入客户端后,它变成了无限循环。

Following things are wrong: 以下是错误的:

Server.java Server.java

 try {
         while (( msg = reader.readLine())  != null) {
            print(msg);
            if(msg.toLowerCase().equals("bye")) {
                print("Client left");
                break;
            }
            writer.write("From server: " + msg);
        }

Should be the last statement of loop writer.write("From client: " + msg); 应该是循环writer.write("From client: " + msg);的最后一条语句writer.write("From client: " + msg); and if(msg.toLowerCase().equals("Bye")) should bye if(msg.toLowerCase().equals("Bye"))应该bye

Client.java Client.java

try {
           while((msg = reader.readLine()) != null) {
               print(msg);
                if(msg.toLowerCase().equals("quit")) {
                    break;
                }
              writer.write("From client: " + msg);
            }

It should be last in loop writer.write("From client: " + msg); 它应该位于循环writer.write("From client: " + msg);

You're reading lines but you aren't sending lines. 您正在阅读线路,但未发送线路。 You need to send a line terminator. 您需要发送一个行终止符。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM