多客户端服务器 - Java

时间:2014-04-10 23:10:36

标签: java sockets client-server

我有一个准备好的程序充当客户端,另一个充当服务器。

我希望能够向服务器发送消息,然后服务器将消息转发给另一个也连接到服务器的客户端。

因此服务器应该将消息转发给其他客户端。

我怎么能够做到这一点,我需要阅读什么?

这就是我现在所拥有的。

Server.java

package server;

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

import javax.swing.*;

public class Server{

public static void run() {
    ServerSocket serverSocket = null;
    Socket socket = null;
    try{
        while(true){
            serverSocket = new ServerSocket(5555);
            socket = serverSocket.accept();
            InputStreamReader streamReader = new InputStreamReader(socket.getInputStream());
            BufferedReader bufferedReader = new BufferedReader(streamReader);
            String message = bufferedReader.readLine();
            System.out.println(message);
            if(message != null){
                PrintStream printStream = new PrintStream(socket.getOutputStream());
                printStream.println("Message receivd!");
            }
            streamReader.close();
            socket.close();
            serverSocket.close();
            bufferedReader.close();
        }
    }catch(Exception e){}
 //     try{
 //         
 //     }catch(Exception e){}
     }
    public static void main(String[]args){
    Server s = new Server();
    s.run();
}

}

然后我也得到了TCPClient.java

package client;

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

 public class TCPClient {
private String serverIP = "localhost";
private int serverPort = 1111;
private int count = 0;
private Thread thread;

public TCPClient() {
    this.thread = new Thread(new ConnectAndListenToServer());
  //        thread.start();
}
public void sendMessage(int count){
    this.count = count;
    this.thread = new Thread(new ConnectAndListenToServer());
    thread.start();
}
private class ConnectAndListenToServer implements Runnable {
    Socket socket = null;
    public void run() {
        BufferedReader bufferedReader = null;
        InputStreamReader streamReader = null;
        try {
            socket = new Socket(serverIP,serverPort);
            PrintStream printStream = new PrintStream(socket.getOutputStream());
            printStream.println(count);
            streamReader = new InputStreamReader(socket.getInputStream());
            bufferedReader = new BufferedReader(streamReader);
            String message = bufferedReader.readLine();
            if(message != null){
                System.out.println(message);
            }

        }catch(Exception e){}
        try{
            socket.close();
            bufferedReader.close();
            streamReader.close();
        }catch(Exception ee){}
    }
}

}

我如何能够将服务器上已经收到的消息转发给另一个客户端?

Example

2 个答案:

答案 0 :(得分:4)

  

我如何能够将服务器上已经收到的消息转发给另一个客户端?

我已经在相同的背景中发布了一些示例。

直到现在你做得很好,要完成它,请看看 Client-Server Communication 。我已经逐步描述了它,只需按照线程查找其他样本。

如果您有任何问题,请告诉我!

答案 1 :(得分:0)

只有在Client 2连接时才Client 1连接,这才有效。

如果您编写多线程应用程序或使用Selector,则可以这样做。