在客户端发送消息后保持Java服务器打开

时间:2014-03-04 04:54:06

标签: java sockets client

我在解决如何使用我的服务器类保持连接打开时遇到问题。当它连接时,我希望客户端发送到客户端已连接的服务器,它做了。我的问题是,在收到消息后,java文件停止运行。有人可以给我一些建议,告诉我如何让服务器等待来自用户的消息,直到收到某个消息为止?提前谢谢你,将在同一时间进行研究。

客户端类:

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

public class Client {

    public static void main(String[] args) throws Exception
    {
        Client myClient = new Client();
        myClient.run();
    }

    public void run() throws Exception
    {
        Socket clientSocket = new Socket("localhost", 9999);
        PrintStream ps1 = new PrintStream(clientSocket.getOutputStream());
        ps1.println("A client has successfully connected.");
        //Sends message to the server
        PrintStream ps = new PrintStream(clientSocket.getOutputStream());
        Scanner scan = new Scanner(System.in);
        String cMessage = scan.nextLine();
        ps.println(cMessage);
        //Reads and displays response from server
        InputStreamReader ir = new InputStreamReader(clientSocket.getInputStream());
        BufferedReader br = new BufferedReader(ir);
        String message = br.readLine();
        System.out.println(message);        
    }

}

服务器类:

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

public class Server {

    public static void main(String[] args) throws Exception
    {
        Server myServer = new Server();
        myServer.run();
    }

    public void run() throws Exception
    {

        //Initializes the port the serverSocket will be on
        ServerSocket serverSocket = new ServerSocket(9999);
            System.out.println("The Server is waiting for a client on port 9999");
        //Accepts the connection for the client socket
        Socket socket = serverSocket.accept();

        InputStreamReader ir = new InputStreamReader(socket.getInputStream());
        BufferedReader br = new BufferedReader(ir);
        String message = br.readLine();
        //Confirms that the message was received
        System.out.println(message);

            if(message.equals("HELLO"))
            {
                PrintStream ps = new PrintStream(socket.getOutputStream());
                ps.println("Received our hello message.");
            }
            else
            {
                PrintStream ps = new PrintStream(socket.getOutputStream());
                ps.println("Did not receive your hello message");
            }
    }

}

1 个答案:

答案 0 :(得分:2)

使用while循环连续运行服务器,并将收到的消息与所需的结束消息(再见)与if条件进行比较,代码如下,

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

public class Server {

public static void main(String[] args) throws Exception
{
    Server myServer = new Server();
    myServer.run();
}

public void run() throws Exception
{


    //Initializes the port the serverSocket will be on
    ServerSocket serverSocket = new ServerSocket(9999);
    while(true)
    {
        System.out.println("The Server is waiting for a client on port 9999");
    //Accepts the connection for the client socket
    Socket socket = serverSocket.accept();

    InputStreamReader ir = new InputStreamReader(socket.getInputStream());
    BufferedReader br = new BufferedReader(ir);
    String message = br.readLine();
    //Confirms that the message was received
    System.out.println(message);

        if(message.equals("HELLO"))
        {
            PrintStream ps = new PrintStream(socket.getOutputStream());
            ps.println("Received our hello message.");
        }
        else
        {
            PrintStream ps = new PrintStream(socket.getOutputStream());
            ps.println("Did not receive your hello message");
        }
}
     if(message.equals("bye"))
      break;    // breaking the while loop.
   } // end of while loop.

}