服务器在客户端 - 服务器应用程序

时间:2015-09-13 10:18:28

标签: java sockets client-server inputstream bufferedreader

在我的客户端 - 服务器应用程序中,客户端向服务器发送消息,服务器应显示消息。但就我而言,客户端只能发送,但服务器无法实现。

我尝试过不同的端口号(即8080,8000,4444等)。套接字似乎可以建立连接,但我真的不知道为什么服务器无法从客户端读取输入。

这是我的完整项目(我已经忽略了这两个应用程序的主要类,因为我只有调用方法):

EchoServer.java:

    package client.server;

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

public class EchoServer {

    public EchoServer() {
    }

    public void establish() {
        ServerSocket serverSocket = null;
        try {

            serverSocket = new ServerSocket(8080);
        } catch (IOException e) {
            System.out.println("Could not listen on port: 1234");
            System.exit(-1);
        }
        Socket clientSocket = null;
        try {
            clientSocket = serverSocket.accept();
        } catch (IOException e) {
            System.out.println("Accept failed: 1234");
            System.exit(-1);
        }
        PrintWriter out = null;
        BufferedReader in = null;
        try {
            out = new PrintWriter(
                    clientSocket.getOutputStream(), true);
            in = new BufferedReader(
                    new InputStreamReader(
                            clientSocket.getInputStream()));
        } catch (IOException ioe) {
            System.out.println("Failed in creating streams");
            System.exit(-1);
        }
        String inputLine, outputLine;
        try {
            while ((inputLine = in.readLine()) != null) {
                out.println(inputLine);
                if (inputLine.equals("Bye.")) {
                    break;
                }
            }
        } catch (IOException ioe) {
            System.out.println("Failed in reading, writing");
            System.exit(-1);
        }
        try {
            clientSocket.close();
            serverSocket.close();
        } catch (IOException e) {
            System.out.println("Could not close");
            System.exit(-1);
        }
    }
}

EchoClient.java:

    package server.client;

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

public class EchoClient {

    public EchoClient() {
    }

    public void establish() {
        Socket echoSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;
        try {
            //echoSocket = new Socket(InetAddress.getLocalHost(), 1234);
            echoSocket = new Socket(InetAddress.getLocalHost(), 8080);
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(
                    echoSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host.");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O");
            System.exit(1);
        }
        BufferedReader stdIn = new BufferedReader(
                new InputStreamReader(System.in));
        String userInput;
        try {
            while ((userInput = stdIn.readLine()) != null) {
                out.println(userInput);
                if (userInput.equals("Bye.")) {
                    break;
                }
                System.out.println("echo: " + in.readLine());
            }
            out.close();
            in.close();
            stdIn.close();
            echoSocket.close();
        } catch (IOException ioe) {
            System.out.println("Failed");
            System.exit(
                    -1);

        }

    }
}

2 个答案:

答案 0 :(得分:1)

您的服务器不会将传入的文本写入控制台,而只会返回到尚未处理来自服务器的传入文本的客户端。

(out isn' System.out但是Socket.out!)

答案 1 :(得分:0)

在您的服务器中,您正在使用whileloop中的readLine()进行监听

while ((inputLine = in.readLine()) != null) {
                System.out.println("inputLine "+inputLine);

这只是来自客户端的输入流。上述SOP将打印来自客户端的消息。尝试刷新您的流,因为它不会打印,直到您的缓冲区已满。