public class UdpTxet {
public static void main(String[] args) throws SocketException{
DatagramSocket sendSocket = new DatagramSocket();
DatagramSocket receSocket = new DatagramSocket(10009);
new Thread(new UdpSend(sendSocket)).start();
new Thread(new UdpRece(receSocket)).start();
}
}
//发送键盘录入的类
class UdpSend implements Runnable {
private DatagramSocket ds;
public UdpSend(DatagramSocket ds){
this.ds = ds;
}
public void run(){
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//键盘录入数据,并封装成数据包
String line = null;
while((line=br.readLine())!=null){
if("886".equals(line))
break;
byte[] data = line.getBytes();
DatagramPacket dp = new DatagramPacket(data,data.length,
InetAddress.getByName("111.201.122.45"),10009);
//通过Socket服务,将已有的数据包发送出去
ds.send(dp);
}
ds.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//接收数据的类
class UdpRece implements Runnable {
private DatagramSocket ds;
public UdpRece(DatagramSocket ds){
this.ds = ds;
}
public void run(){
try{
while(true){
//定义数据包,用于存储数据
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//通过receive方法将收到的数据存入数据包中
ds.receive(dp);
//通过数据包的方法获取其中的数据
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());
System.out.println("Ip = "+ip+" "+data);
}
}
catch(Exception e){
throw new RuntimeException("接收数据失败");
}
}
}
我用MyEclipse写的 为什么运行结果一直是在控制台录入数据啊,输入886也一样。
输出ip+data都没有作者: 玥夜 时间: 2014-8-17 17:34
886只是关闭了你的键盘录入 没有关闭下面的接收端 所以程序会一直运行 处于接受状态 我的能输出结果 不知道你的为什么作者: 一顿一只牛 时间: 2014-8-17 17:45