本帖最后由 周恺 于 2012-7-17 08:11 编辑
你的接收方法的循环,我帮你改了一下.
while (true) {
// ①定义一个数据包
byte[] buf = new byte[1024*64];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
// ②将接收的数据包存放如dp中
ds.receive(dp);
// ③处理接收的数据
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(), 0, dp.getLength());//这里,你要打印的字符串,不能将所有的字节数组一起打印,而是接收多长的数据就打多长.
//使用dp.getData()方法获取数据缓冲区,dp.getLength())获取缓冲区长度.
//System.out.println(data);
System.out.println(ip + ":" + data);
//收完一个,休息1秒
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("发送到失败");
e.printStackTrace();
}
在我的控制台上已经运行成功.
另外,由于receive()方法是阻塞式方法,也就是说receive()如果接收不到数据包,就会一直等着,
不会跟发送线程"打架",是不会存在你说的那种线程问题的,你把sleep去掉再试试.
还有,你在控制台运行不了,是因为你的程序前面有包名,是在eclipse的工作区里面定义的,CLASSPATH找不到,当然运行不了. |