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