Java,向不同IP发送数据

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();
        }
    }
}

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

2个回答

1
从“s”套接字创建一个已接受的套接字数组,然后您可以循环遍历它以查找要发送数据的客户端。

当你接收到数据后,可以循环数组并将其发送给所有已连接的客户端(使用我告诉你的数组)。 - Silent Byte
可能一个List或者Map会是更好的选择,因为数组假设了固定的大小。 - afsantos

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()。
我建议您使用缓冲区进行输入和输出,因为它们更有效率。 我还建议您在服务器类中使用线程,特别是处理多个客户端时。

在使用套接字时,首先打开OutputStream是一个好的实践。 - afsantos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接