簡體   English   中英

如何使多個客戶端與服務器通信?

[英]How to enable multiple clients to communicate with the server?

問題是不確定如何使多個客戶端通過線程與服務器通信,我已經嘗試過,但是我認為做錯了什么。 任何幫助將不勝感激。

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

public class ChatServer {
    ArrayList clientOutputStreams;

    public class ClientHandler implements Runnable {
        BufferedReader reader;
        Socket sock;

        public ClientHandler(Socket clientSocket) {
            try {
                sock = clientSocket;
                InputStreamReader isReader = new InputStreamReader(
                        sock.getInputStream());
                reader = new BufferedReader(isReader);
            } catch (Exception x) {

            }
        }

        public void run() {
            String message;
            try {
                while ((message = reader.readLine()) != null) {
                    System.out.println("read" + message);
                    tellEveryone(message);
                }
            } catch (Exception x) {

            }
        }
    }

    public void go() {
        clientOutputStreams = new ArrayList();
        try {
            ServerSocket serverSock = new ServerSocket(5000);

            while (true) {
                Socket clientSocket = serverSock.accept();
                PrintWriter writer = new PrintWriter(
                        clientSocket.getOutputStream());
                clientOutputStreams.add(writer);

                Thread t = new Thread(new ClientHandler(clientSocket));
                t.start();
                System.out.println("got a connection");
            }
        } catch (Exception x) {

        }
    }

    public void tellEveryone(String message) {
        Iterator it = clientOutputStreams.iterator();
        while (it.hasNext()) {
            try {
                PrintWriter writer = (PrintWriter) it.next();
                writer.println(message);
                writer.flush();
            } catch (Exception x) {

            }
        }
    }

    public static void main(String[] args) {
        new ChatServer().go();
    }`enter code here`

}

要允許多個客戶端連接到您的服務器,您需要一台服務器不斷尋找新客戶端來連接。 可以這樣完成:

while(true) {
    Socket socket = Ssocket.accept();
    [YourSocketClass] connection = new [YourSocketClass](socket);
    Thread thread = new Thread(connection);
    thread.start();
}

最好在單獨的服務器Java文件中完成此操作,該文件可以獨立於客戶端運行。

暫無
暫無

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

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