import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
//发送程序
public class UDPSend {
public static void main(String[] args) throws IOException {
//给本机发送消息
InetAddress inet = InetAddress.getByName("127.0.0.1");
byte[] data = "你好UDP".getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, inet, 10000);
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
socket.close();
}
}
//接收程序
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPReceive {
public static void main(String[] args) throws IOException {
byte[] data = new byte[1024];
//通过10000端口号接收数据
DatagramSocket socket = new DatagramSocket(10000);
DatagramPacket packet = new DatagramPacket(data, data.length);
socket.receive(packet);
int length = packet.getLength();
//打印从UDPSend接收的数据
System.out.println(new String(data,0,length));
socket.close();
}
}
问题是控制台不显示任何东西,但调试模式会显示"你好UDP。为什么?
复制你代码在我ide里运行可以显示收到的文字,你在什么ide里运行的?注意要先启动UDPReceive再启动UDPSend
可能是你启动的时候问题,先启动接收方,再开启发送方,这样试试。代码没有问题。
应该是执行顺序的问题, 可以改成循环发送 应该是能看到打印的
启动顺序不对,先启动接收,再开启发送就可以了。
调试模式有东西显示,是因为调试时,在此处有断点,可以查看内容,这说明你的程序是没问题的。而正常运行时,输出之后界面一闪就关啦,你也就看不到啦,最后的办法,在输出后面,再加一条读取字符的命名,就可看到输出的内容啦。
加入读字符如char c = new java.util.Scanner(System.in).next().charAt(0);
先启动server,再启动client
首先呢,要复制你代码在我ide里运行可以显示收到的文字,然后看看你在什么ide里运行的?一定注意要先启动UDPReceive再启动UDPSend
可能是你启动顺序有问题,应该是先启动Sever,再启动Client;如果先启动Client,肯定由于服务器端没连接而没有效果。