gpt4 book ai didi

java - 关于java Sockets的愚蠢问题:can i make a client listener on the input stream while the client writes the first thing to the object?

转载 作者:行者123 更新时间:2023-11-30 05:03:25 25 4
gpt4 key购买 nike

InetAddress Address = InetAddress.getByName("172.24.3.154");
kkSocket = new Socket(Address, 2003);

out = new ObjectOutputStream(kkSocket.getOutputStream());
in = new ObjectInputStream(kkSocket.getInputStream());

public static <T> Object sendReceive(T obj) {
try {

out.writeObject(obj);
out.flush();
System.out.println("Client : " + obj.toString());

Object resp = in.readObject();
if (resp != null) {
System.out.println("Server : " + resp.toString());
}
return resp;

} catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}

这是我向服务器发送请求的客户端方法。

out = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());

System.out.println("Server: S-a conectat :" + socket.getInetAddress());

Protocol protocol = new Protocol(server);
while (socket.isClosed() != true) {
Object response = protocol.processInput(in.readObject());
System.out.println("Server: message Received: " + getName());
if (response != null) {
out.writeObject(response);
out.flush();
} else {
out.writeObject(null);
out.flush();
}
}

这就是我的服务器所做的。它也有效。我的问题是:为套接字进行此设置,我如何为客户端创建一个单独的监听器,以便在某个时间向客户端发送一条消息,同时客户端仍然正常运行?
我尝试创建一个新线程来管理客户端的输入流,但应用程序无法启动,它只是卡在线程的 run 方法中
谢谢。

编辑:

我正在做的是一个带有套接字的多客户端应用程序,使用多线程。我有上面的代码并为我工作,用于调用“sendReceive”方法向服务器发出请求并返回一些内容。我是什么我想做的是,当我收到特定请求时,我想通知所有在线客户端。我应用了这样的观察者模式:服务器是可观察的,线程是观察者。当收到特定请求时,我会通知所有步骤,但我无法让每个威胁立即向客户端发送消息,因为客户端不会监听。也许我会在错误的方式。有人可以帮忙吗?

最佳答案

如果您不知道服务器何时向客户端发送消息,则您需要使用两个套接字(每个套接字在其自己的端口上 - 异步通信),或者您需要一个更好定义的协议(protocol)来知道何时读取,并且何时写入(一个套接字 - 同步通信)。

如果您无法预测客户端何时需要从套接字读取数据,那么您的应用程序也将无法弄清楚。 :)

在两个套接字方法中,每个套接字可以有一个线程,因此您不必担心 I/O 阻塞。

关于java - 关于java Sockets的愚蠢问题:can i make a client listener on the input stream while the client writes the first thing to the object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902568/

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