我创建了这个SpringBoot应用程序,探索通过用户数据报协议与Java进行网络通信。我正在Eclipse Java EE IDE中为Web开发人员运行该应用程序,版本:Oxygen。1a发布(4.7.1a)
主要类别如下:
@Override
public void run(String... args) throws Exception {
socket = new DatagramSocket(UDP_PORT);
byte[] receiveData = new byte[BUFFER_SIZE];
byte[] sendData = new byte[BUFFER_SIZE];
LOG.info("UDP server init...");
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
socket.receive(receivePacket);
String sentence = new String( receivePacket.getData(), 0, receivePacket.getLength() );
LOG.info("recived [" + sentence + "] from " + receivePacket.getAddress());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
DatagramPacket sendPacket = new DatagramPacket(receiveData, receiveData.length, IPAddress, receivePacket.getPort());
socket.send (sendPacket);
}
}
这里是我创建的用于测试服务器的客户端UDP类
public class UDPClient {
private final static int TCP_PORT = 5202;
private DatagramSocket socket;
private InetAddress address;
private byte[] buf;
public UDPClient() throws SocketException, UnknownHostException {
socket = new DatagramSocket();
address = InetAddress.getByName("localhost");
}
public String sendEcho(String msg) throws IOException {
buf = msg.getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length, address, TCP_PORT);
socket.send(packet);
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
return received;
}
public void close() {
socket.close();
}
public static void main(String[] args) throws IOException, InterruptedException {
UDPClient udpClient = new UDPClient();
for (;;) {
TimeUnit.SECONDS.sleep(3);
System.out.println
(udpClient.sendEcho("cullons"));
}
}
}
在我的计算机中工作正常,然后我将UDPServer部署到服务器上,我使用ipconfig获取ip
IPv4地址………:214.146.86.201
然后我将“localhost”替换为“214.146.86.201”,但我在服务器中没有收到任何消息。
我已经做了
nc -vzu 214.146.86.201 5202
从我的计算机
结果是:
MacBook-Pro-de-lopes:$ nc -vzu 214.146.86.201 5202
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif (null)
src 192.166.26.140 port 56827
dst 214.146.86.201 port 5202
rank info not available
Connection to 214.146.86.201 port 5202 [udp/*] succeeded!
但服务器打印
无效的
在…上
LOG.info("socket InetAddres: " + socket.getInetAddress());
和
LOG.info("socket RemoteSocketAddress: " + socket.getRemoteSocketAddress());
我也试过服务器
socket = new DatagramSocket(UDP_PORT, InetAddress.getByName("214.146.86.201"));
同样的结果