首先,UDP是相当可靠的(其实和IP协议本身一样可靠)。TCP 只是确保接收到数据,这在后端涉及很多魔法。除非您绝对需要确保其他机器收到消息,否则您可以使用 UDP 来完成。请注意,我并不是说“不要使用 TCP”,我只是想直截了当地说您也应该考虑 UDP。
无论如何,是的,您可以创建一个简单的听力程序。这是从服务器读取消息的 Java 客户端示例。它覆盖了 Thread 类的 run 方法:
public void run() {
try {
String messageFromServer = reader.readLine();
while (messageFromServer != null) {
// Do things with messageFromServer here
// processor.processFromServer(messageFromServer);
messageFromServer = reader.readLine(); // Blocks the loop, waits for message
}
}
catch (IOException e) {
// Handle your exception
}
}
除其他外,我的线程是这样设置的:
public CommunicationThread(String hostname, int port, int timeout) throws IOException, SocketTimeoutException {
InetSocketAddress address = new InetSocketAddress(hostname, port);
socket = new Socket();
socket.connect(address, 2000); // 2000ms time out
// You can use the writer to write messages back out to the server
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
现在,关于服务器端,您可以执行以下操作:
- 编写一个程序以允许客户联系,前提是他们知道您的地址。
- 接受连接,并将套接字存储在列表中。
- 当您需要发送消息时,遍历列表并将数据发送给列表上的每个人。
您可以使用以下命令开始在您的服务器上收听
this.socket = new ServerSocket(port);
您可以(甚至应该(?))使其线程化,以便您可以在为他人服务的同时接受客户。您可以通过以下方式接受新客户:
socket.accept(); // Blocks, waiting for someone to connect, returns open socket
随意将它传递给一个可以处理 BufferedWriter 的全新类(如果你也想从客户端读取,甚至可能是 BufferedReader )。该类是您将实现诸如 writeToClient(message) 之类的东西的地方 考虑您有一个 ClientConnection 类的情况,该类具有 writeToClient(String s) 方法和(服务器服务器,Socket 套接字)和初始化的 ArrayList conList。以下是您应该遵循的方法:在服务器中的一个单独线程中,接受与
ClientConnection con = new ClientConnection(this, socket.accept());
conList.add(con);
然后,当您想写信给客户时:
for (ClientConnection c : conList) {
c.writeToClient("I'm sending you a message!");
}
我希望你对你需要做什么有一个模糊的概念。阅读 Socket 文档,它非常有用。此外,与线程应用程序一样,请确保您在遍历列表时不做诸如修改列表之类的事情,并避免竞争条件。
祝你好运!