簡體   English   中英

Java IO套接字未發送輸出流

[英]Java IO socket not sending outputstream

當調試我的代碼時,代碼在這里停止:

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

我正在從客戶端類發送輸入,但是由於服務器從未收到該消息,所以我無法弄清楚哪里出錯了。

這是我的整個服務器班:

    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();

    }

}

這是客戶端類:

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();
    }

}

您的錯誤是服務器和客戶端都在不打印任何內容的情況下發送/接收消息。 就像當您從客戶端發送消息時,服務器接收到該消息並再次寫入客戶端后,它變成了無限循環。

以下是錯誤的:

Server.java

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

應該是循環writer.write("From client: " + msg);的最后一條語句writer.write("From client: " + msg); if(msg.toLowerCase().equals("Bye"))應該bye

Client.java

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

它應該位於循環writer.write("From client: " + msg);

您正在閱讀線路,但未發送線路。 您需要發送一個行終止符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM