如何在不先从客户端接收数据的情况下获取客户端的端口和地址?

年龄力量

我正在制作一个简单的 UDP 聊天程序,我希望服务器能够发送到客户端,而无需先从客户端接收数据。正常情况下,服务器在接收到客户端的数据时,会获取到客户端的IP和端口,从而可以与其进行通信。

我的服务器代码:

package com.ageforce;

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class ChatServer {
    DatagramSocket server;
    byte[] receivedData = new byte[1024];
    Scanner scanner = new Scanner(System.in);
    byte[] sentData;
    DatagramPacket dp2 = new DatagramPacket(receivedData, receivedData.length);

    public ChatServer() throws SocketException {
        server = new DatagramSocket(7000);
    }

    public static void main(String[] args) throws SocketException {
        ChatServer cs = new ChatServer();

        Thread receiveMessage = new Thread(() -> {
            while (true) {
                try {
                    cs.server.receive(cs.dp2);

                } catch (IOException e) {
                    e.printStackTrace();
                }

                String storedData = new String(cs.dp2.getData());
                System.out.println(storedData);
            }
        });

        Thread sendMessage = new Thread(() -> {
            while (true) {
                String sentMessage = cs.scanner.nextLine();
                cs.sentData = sentMessage.getBytes();

                // This is the area of the code where the server gets IP and port of client from the received data. I'd like this to be changed.
                InetAddress getIP = cs.dp2.getAddress();
                int port = cs.dp2.getPort();

                DatagramPacket dp3 = new DatagramPacket(cs.sentData, cs.sentData.length, getIP, port);
                try {
                    cs.server.send(dp3);

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });


        sendMessage.start();
        receiveMessage.start();
    }
}

是否有可能做到这一点?非常感谢任何答复。

约翰·博林格

如何在不先从客户端接收数据的情况下获取客户端的端口和地址?

UDP 没有提供这种可能性。它是一种无连接的协议,因此服务器甚至不知道有一个客户端,直到它从它接收的消息。

可以想象,您可以创建某种初步的应用程序级协议,客户端在向服务器发送任何聊天数据之前向服务器宣布自己,但这种协议本身并不是 UDP 的一部分,如果这是您想要的,那么您应该考虑使用 TCP相反,它确实具有在发送任何数据之前建立连接的内置概念。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不从Flex客户端接收消息的情况下从BlazeDS推送数据?

如何获取客户端的IP地址和端口在PHP?

如何在不使用 Stripe 的 UI 层的情况下获取客户端令牌?

如何在没有邮件接收客户端的情况下验证Mandrill自定义发送域?

在gRPC流的服务器端调用.end()之前,如何在客户端接收数据

从客户端接收回数据

如何使用 Python Socket 从多个客户端接收数据

如何在 HiveMQ 客户端接收多条消息?(MQTT)

从客户端的锯齿地址获取数据

如何在不提交的情况下使用fileupload控件在客户端获取选定的文件名?

如何在没有任何身份验证尝试的情况下获取boto3 STS客户端?

如何在不阻止服务器的情况下通过tcp将数据发送到客户端?

如何在没有数据库的情况下安装MySQL客户端(在Windows Server上)

如何在未安装任何客户端的情况下从Robot Framework连接Oracle数据库

如何在没有风险的情况下将ip(客户端)存储在数据库中

如何在不关闭套接字的情况下通知客户端数据已完成

如何接收客户端发送的数据

如何从Redis获取客户端地址

如何在WebRequest中获取客户端的远程地址

如何在Roda中获取客户端的IP地址?

如何在不破坏客户端代码的情况下拆分大型程序包?

如何在不立即保存的情况下将文件发送到客户端

如何在启用keepalive选项的情况下检测死客户端

如何在不将凭据存储在本地的情况下建立google oAuth客户端?

如何在不停机的情况下轮流使用Google oAuth客户端机密?

如何在不向客户端展示算法的情况下加密用于API访问的密码?

如何在没有REST客户端的情况下演示REST API

OAuth2 - 如何在没有客户端密码的情况下授权?

如何在不提供服务的情况下测试Feign REST客户端?