Java,将数据发送到不同的IP

Java,将数据发送到不同的IP,java,networking,Java,Networking,我正在制作一个简单的聊天客户端,我让服务器/客户端工作并完美地发送数据。我想知道如何向选定的用户发送数据。选择部分我可以解决,但我不知道如何发送东西到选定的IP。这是到目前为止我的服务器 package Server; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.

我正在制作一个简单的聊天客户端,我让服务器/客户端工作并完美地发送数据。我想知道如何向选定的用户发送数据。选择部分我可以解决,但我不知道如何发送东西到选定的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();
        }
    }
}

我想将服务器上的信息重定向到一个特定的客户端

创建一个可接受的套接字数组(在您的情况下是从“s”套接字),然后您可以循环它以找到要向哪个客户端发送数据。

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

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
s。