我正在制作一个简单的聊天客户端以获得乐趣,我让服务器/客户端工作并完美地发送数据。我想知道如何将数据发送给选定的用户。选择部分我可以解决,但我不知道如何将事情发送到选定的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();
}
}
}
我想将信息从服务器重定向到特定客户端
答案 0 :(得分:1)
创建一个接受套接字的数组,在你的情况下从“s”套接字,然后你可以循环它以找到发送数据的客户端。
答案 1 :(得分: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);
}
}
在您的服务器中放置一个List并为每个ClientHandler分配一个ID,然后您可以遍历您的List,如果ID匹配,请在客户端上使用sendMessage()。
我建议您使用缓冲区作为输入和输出,因为它们更有效。 我还建议您在服务器类中使用线程,尤其是在处理多个客户端时。