1
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();
    }   
} 

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

编辑 :

我正在做的是一个带有套接字的多客户端应用程序,使用多线程。我有上面的代码并为我工作,用于调用“sendReceive”方法向服务器发出请求并返回一些东西。我正在尝试什么做的是当我收到一个特定的请求时,我想通知所有在线客户端。我应用了这样的观察者模式:服务器是可观察的,线程是观察者。当一个特定的请求进来时,我会通知所有的踏板,但我t get each threat to send to the clients immediately a message because the client doesn听不见。也许我走错了路。有人可以帮忙吗?

4

1 回答 1

2

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

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

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

于 2011-05-05T20:39:53.023 回答