给出以下代码:
Client c1 = new Client();
c1.connect("127.0.0.1",1300);
连接功能:
public void connect(String serverName, int port)
{
try {
Socket socket = new Socket(serverName,port);
connection = new ConnectionProxy(socket);
connection.start();
}
catch(IOException e)
{
e.printStackTrace();
}
}
(ConnectionProxy
类扩展Thread
):
public class ConnectionProxy extends Thread {
private Socket socket;
private InputStream is;
private OutputStream os;
private StringConsumer client;
public ConnectionProxy(Socket socket)
{
this.socket = socket;
try {
is = socket.getInputStream();
os = socket.getOutputStream();
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void run () {
DataInputStream dis = new DataInputStream(is);
DataOutputStream dos = new DataOutputStream(os);
while (socket != null)
{
try {
String msg = dis.readUTF();
System.out.println(msg);
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
我正在尝试实施聊天,我发现很难将客户端写入的消息发送给所有当前连接的客户端。
我怎么能这样做?我应该在服务器端保存每个对象(如c1)的引用,还是应该在服务器端保留ConnectionProxy
个线程?
如果没有,我该如何正确有效地实施?
很想得到一些帮助! 谢谢!
答案 0 :(得分:1)
如果没有提供太多代码,我将概述您为实现目标而想做的事情。
在server
上:
array
个对象的client
或类似内容send()
班级client
功能
broadcast()
函数,并向每个函数发送消息(使用前面提到的send()
函数clients
,否则您在尝试发送给他们时会遇到麻烦。在client
上:
server
(使服务器更容易将您移除)答案 1 :(得分:0)
服务器应为每个传入连接创建一个新的客户端处理程序线程。
例如,在服务器端尝试类似:
ServerSocket server = new ServerSocket(port);
while (true) {
Socket client = server.accept();
//add incoming client to connected clients vector.
HandleClient c = new HandleClient(client);
clients.add(c);
}
在客户端向量中创建和存储客户端后,您可以在HandleClient类run()方法上实现一个bufferReader(同样不是必须的)来获取客户端文本