Welcom to RO_wsy's blog

java中UDP编程

发送者类如下:

import java.net.*;

public class UdpSender {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			DatagramSocket ds = new DatagramSocket();
			String info = "hello snooker 中国";
			
			ds.send(new DatagramPacket(info.getBytes(), info.getBytes().length, InetAddress.getByName("127.0.0.1"), 3000));
			
			ds.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}


注意:中文转换为byte时一个字符会转换成两个byte,所以DatagramPacket函数中长度参数不能用info.length()

接收者类如下:

import java.net.*;

public class UdpReceiver {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			DatagramSocket ds = new DatagramSocket(3000);
			byte[] buf = new byte[1024];
			DatagramPacket dp = new DatagramPacket(buf, 1024);
			
			ds.receive(dp);
			String info = new String(dp.getData(), 0, dp.getLength());
			
			System.out.println(info + " from:" + dp.getAddress().getHostAddress() + ", port:" + dp.getPort());
			
			ds.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


运行程序时必须先运行receiver类,否则数据会丢失

输出结果如下:

hello snooker 中国 from:127.0.0.1, port:64039

posted @ 2012-11-22 15:48  RO_wsy  阅读(193)  评论(0编辑  收藏  举报