gpt4 book ai didi

java - 线程和网络问题

转载 作者:太空宇宙 更新时间:2023-11-04 07:39:06 26 4
gpt4 key购买 nike

给出以下代码:

 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() 函数
  • 请确保跟踪(并删除)列表中任何失效/断开连接的客户端,否则您在尝试向他们发送数据时会遇到麻烦。

在您的客户端上:

  • 确保在关闭/断开连接时发送“连接终止”消息,以告诉服务器您要离开(使服务器更容易删除您)

关于java - 线程和网络问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16336156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com