(Java)在运行时让两个线程相互通信?

时间:2014-04-23 07:33:08

标签: java multithreading sockets chat

我正在学习java。我正在尝试建立一个简单的客户端/服务器聊天系统。到目前为止,我所拥有的是一个程序,其中服务器通过为每个客户端连接提供一个单独的线程来接受多个客户端连接。

我现在的问题是,我无法弄清楚如何从一个客户端获取输入,然后将其发送到所有客户端,因此基本上有一个非常简单的聊天机制。我将如何实现这一目标?什么是更简单的方法?

到目前为止,我的代码就在这里;

class Client {
  public static void main(String argv[]) throws Exception {
    String sentMessage;  //variable for input
    String receivedMessage; //variable for output
    String status;
    boolean running;

    BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));

    Socket clientSocket = new Socket("127.0.0.1", 5622); //name of computer to connect with and port number to use

    DataOutputStream outToServer =
        new DataOutputStream(clientSocket.getOutputStream());
    BufferedReader inFromServer =
        new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

    System.out.println("Client Side\n");

    running = true;

    while(running)
    {
        sentMessage = inFromUser.readLine(); //user inputs text to variable 'xInput'                      

        outToServer.writeBytes(sentMessage + '\n'); //the variable is sent to the server

        status = inFromServer.readLine();


        System.out.println("FROM SERVER: " + status); //display to user
    }    
    clientSocket.close();    
    }
}

服务器代码。

class Server {

  public static void main(String argv[]) throws Exception {
    String clientMessage;    

    boolean listening = true;
    int portNumber = 5622;

    try (ServerSocket serverSocket = new ServerSocket(portNumber)) {
        while (listening) {
            new ServerThread(serverSocket.accept()).start();
        }
    } catch (IOException e) {
        System.err.println("Could not listen on port " + portNumber);
        System.exit(-1);
    }
  }
}

处理客户端连接的线程。

public class ServerThread extends Thread {
private Socket socket = null;

public ServerThread(Socket socket) {
    super("ServerThread");
    this.socket = socket;
}

public void run () {

    int msgCnt = 0;

    try (
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
            new InputStreamReader(
                socket.getInputStream()));
    ) {
        //something needs to go here
    } catch (IOException e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:0)

如果您正在寻找一个简单的客户端 - 服务器通信样本,那么请看一下我逐步描述的帖子。