给出以下代码:
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
线程?如果没有,我如何正确有效地实现它?
很想获得一些帮助!谢谢!
在没有提供太多代码的情况下,我将概述您想要实现目标的操作。
在您的服务器
上:
- 保留所有连接的
客户端
对象的数组
或类似内容
- 在
client
类中实现 send()
函数
- 实现一个
broadcast()
函数,循环遍历客户端列表并向每个客户端发送消息(使用前面提到的 send()
函数
- 请确保跟踪(并删除)列表中任何失效/断开连接的
客户端
,否则您在尝试向他们发送数据时会遇到麻烦。
在您的客户端
上:
- 确保在关闭/断开连接时发送“连接终止”消息,以告诉
服务器
您要离开(使服务器更容易删除您)
我是一名优秀的程序员,十分优秀!