3

我正在制作一个简单的聊天客户端来玩,我让服务器/客户端完美地工作并发送数据。我想知道如何将数据发送给选定的用户。选择部分我可以解决,但我不知道如何将东西发送到选定的 IP。到目前为止,这是我的服务器。

package Server;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @class Connect
 * @date Feb 25, 2013 10:14:00 PM
 * @author Zach
 */

public class Connect { //Server
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(43595);

        while (server.isBound()) {

            Socket s = server.accept();
            DataOutputStream out = new DataOutputStream(s.getOutputStream());
            DataInputStream in = new DataInputStream(s.getInputStream());

            int length = in.read();
            byte[] data = new byte[length];
            in.read(data);
            String str = new String(data, "UTF-8");

            s.close();
        }
    }
}

我想将信息从服务器重定向到特定客户端

4

2 回答 2

1

制作一个接受的套接字数组,在您的情况下从“s”套接字,然后您可以循环它以查找要将数据发送到哪个客户端。

于 2013-02-26T18:00:53.220 回答
0

创建一个处理每个客户端的类:

public class ClientHandler {

Socket connection;
DataInputStream in;
DataOutputStream out;

public ClientHandler(Socket s) {
    connection = s;
}
public void startup() throws IOException {
    in = new DataInputStream(connection.getInputStream());
    out = new DataOutputStream(connection.getOutputStream());
    out.flush();
}

public void sendMessage(byte[] message) throws IOException {
    out.write(message);
}

}

在您的服务器中放置一个列表并为每个 ClientHandler 分配一个 ID,然后您可以遍历您的列表,如果 ID 匹配,请在客户端上使用 sendMessage()。

我建议您对输入和输出使用缓冲区,因为它们更有效。我还建议您在服务器类中使用线程,尤其是在处理多个客户端时。

于 2013-02-26T18:09:28.037 回答