【发布时间】:2021-01-07 23:48:36
【问题描述】:
我想通过同一以太网连接向另一台设备发送 UDP 数据包/消息,但我不确定服务器/客户端关系在哪里。
接收消息被配置为在收到消息后自动发回响应,因此两个设备将只是相互通信......
我错过了什么吗?
我很困惑,因为我用来从客户端向服务器发送消息的代码具有参数“服务器 ip”和“服务器端口”,所以我不确定是否可以 1) 只需替换参数并使用相同的代码和 2)如果可能的话,在这些参数中输入什么,初始设备的端口号和 ip?还是第二台设备的?
谢谢!
代码sn-p:
new Thread(new Runnable() {
@Override
public void run() {
try {
InetAddress SERVERIP = InetAddress.getByName(SERVER_IP);
DatagramSocket socket = new DatagramSocket();
socket.setBroadcast(true);
byte[] msg = message.getBytes();
DatagramPacket packet = new DatagramPacket(msg, message.length(),
SERVERIP, SERVERPORT);
socket.send(packet);
socket.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}).start();
【问题讨论】:
-
您可以将短语“client”替换为“source”,将“server”替换为连接的“destination”。
-
所以我应该将 ServerIP 和 ServerPort 替换为目标的 ip 和端口? @SteffenUllrich
-
UDP 是明确的 connectionless,因此不存在 UDP 连接之类的东西。此外,客户端/服务器是 UDP 一无所知的应用层概念。 UDP 没有客户端或服务器。 UDP 是一种即发即弃的协议,它只发送数据报,而不期望对方甚至收到数据报。
-
@RonMaupin:是和不是。虽然没有像 TCP 那样具有专用连接开始(SYN 等)和连接结束(FIN 等)的“真正”连接,但从同一源 ip+port 到同一目标 ip+port 的许多数据包通常被认为是联系。这样的连接在 NAT 中也有明确的支持,
connect函数也可用于 UDP 套接字。 UDP中也有客户端/服务器,例如DNS服务器,实现QUIC协议(即UDP)的Web服务器等。总的来说,客户端和服务器无论如何都是应用层的概念。 -
@SteffenUllrich,是的,这就是我发表评论的原因。如果您在尝试使用网络 API 之前了解网络概念,包括网络堆栈层,以及层背后的抽象和封装的概念,网络编程会容易得多。
标签: java android networking server udp