当前位置: 首页 > 知识库问答 >
问题:

Java套接字-将数据从服务器发送到客户端

白赞
2023-03-14

我有一个关于Java插座的技术问题。

例如,假设我有一个Java Sockets服务器和n个多个客户端。是否可以几乎实时地将数据从服务器发送到任何或所有客户端?

更准确地说:

  • 有哪种监听器可以在Sockets客户端中实现

有人能告诉我什么方法是最好的吗?此外,如果有人有一个代码示例,我也会很高兴。

谢谢

共有1个答案

微生信鸿
2023-03-14

您可以在客户端中建立一个线程,该线程监听套接字并等待。当它从服务器获取数据时,它将继续。

import java.io.IOException;
import java.io.ObjectInputStream;

import java.net.Socket;

public class ResponseThread extends Thread {

    private final Socket socket;

    /**
     * Client is a selfmade interface which has no direct connection to socket communication.
     * i build it to provide start(), stop() and isRunning() methods.
     */
    private final Client client;
    /**
     * @param client encapsulated methods to check and manage the client status itself.
     * @param socket the socket which is connected to the server.
     */
    public ResponseThread(final Client client, final Socket socket) {
        this.client = client;
        this.socket = socket;
    }

    @Override
    public void run() {
        ObjectInputStream reader  = null;
        try(ObjectInputStream reader = new ObjectInputStream(socket.getInputStream())) {
            while (client.isRunning()) {
                try {
                    // The thread will wait here until the server sends data.
                    final String line = (String) reader.readObject();
                    if (null == line || line.isEmpty()) {
                        client.stop();
                    } else {
                        System.out.println(line);
                    }
                } catch (IOException | ClassNotFoundException e) {
                    client.stop();
                }
            }
        } catch (IOException ex) {
            System.out.println("ERROR Abort reading. Could not establish InputStream from Socket.");
        } finally {
            try {
                reader.close();
            } catch (IOException ex) {
                System.out.println("FATAL Could not close Socket.InputStream.");
            }
        }
    }

    public Socket getSocket() {
        return socket;
    }
}
 类似资料:
  • 我正试图从套接字服务器(Java)向套接字客户端(Python)发送一个映像,但客户端中接收到的映像大小不正确,无法打开。我不知道我做错了什么。有什么建议吗?

  • 我也试图从Java服务器和Python客户机传输数据。我成功地将数据从客户端传输到服务器,但根本没有接收到数据。 在python客户机上,我有以下内容:(注意,这是在一个单独的线程中运行的) 如果这是成功的工作,输出将是客户端套接字值,等待服务器,然后得到一些数据。然而,它正陷入等待数据的困境。 这意味着套接字显然不是None,它正在等待缓冲区接收?我将接收缓冲区大小设置为1,以查看是否有任何数据

  • 首先我要感谢你花时间... 我在macbook中用C++创建了一个服务器套接字,在运行windows XP的不同机器中用Java创建了一个客户机/套接字。我已将端口指定为5000,但无法指定正确的主机,因此无法进行连接。当我在windows xp中使用WinSock2创建一个C++服务器/套接字时,当我使用本地主机时,连接是完美的...有什么想法吗??? 提前Thnx int main(int a

  • 我正在创建我的产品,并与这个问题。有一天,我设置了Socket.io,一切都很好。第二天,我将服务器和客户端从http迁移到HTTPS。迁移后客户端和服务器端仍然连接,但不能从客户端发射到服务器,从服务器发射到客户端。 我的ssl证书位于和中,它们加载正确。运行在上的服务器 我的示例react组件。我的react应用程序运行在上。HTTPS连接良好,工作良好。 我该怎么办?也许我在中错误地使用了s

  • 我正在Unity中制作一个游戏,我试图将数据从客户端发送到服务器并返回到客户端(试图保存实例),但当我收到数据并尝试将数据发送回客户端时,它表示udp客户端未连接。 它成功地将数据从我的Unity客户端发送到服务器,但一旦它到达那里,套接字就会断开连接,我就无法返回任何内容。正如你所看到的,我试图设置一些多播选项,但它似乎不能正常工作。 客户: 服务器: 因此,服务器中UdpClient的实例会保

  • 我试图用java实现一个客户端服务器,在这里我读取客户端中的输入并在服务器中执行UperCase,然后返回客户端并打印UperCase。我使用ObjectOutputStream和ObjectInputStream进行读写,但是当我在客户机中键入一个msg时,程序会显示以下错误: Digite uma msg casa java.io.eofexception位于java.io.datainput