java UDP报文的发送与接收

转载 2013年12月05日 09:49:30

import java.io.File;
import java.io.FileInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**--------文件名:UDPServer.java-------------*/
public class UDPServer {
	public static void main(String args[]) {
		try {
			System.out.println("UDP服务端启动成功,等待接收消息...");
			if (args.length != 1) {
				throw new IllegalArgumentException("参数个数有误");
			}
			int port = Integer.parseInt(args[0]); 	// 从命令行中获取端口号参数
			// 创建一个socket,侦听这个端口。
			DatagramSocket dsocket = new DatagramSocket(port);
			byte[] buffer = new byte[2048]; 		// 保存接收到的UDP报文的字节数组
			// 创建一个DatagramPacket,将收到的报文写入buffer中。
			// 注意,这里指定了报文的长度,如果收到的UDP报文比2048大,
			// 多余的信息被舍弃
			DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
			// 不断循环,接收数据
			while (true) {
				dsocket.receive(packet); // 等待收到一个数据包
				// 将收到的报文的字节数组封装成字符串。
				String msg = new String(buffer, 0, packet.getLength());
				// 从数据包中取得消息来源的地址
				System.out.println("Receive: "
						+ packet.getAddress().getHostAddress() + ": " + msg);
				// 如果收到QUIT指令,则退出循环。
				if (msg.equalsIgnoreCase("QUIT")) {
					System.out.println("退出UDP服务");
					break;
				}
				packet.setLength(buffer.length); // 重设数据包的长度
			}
			// 关闭socket
			dsocket.close();
		} catch (Exception e) {
			System.err.println(e);
			// System.err.println(usage);
		}
	}
}
/**--------文件名:UDPClient.java-------------*/
class UDPClient {
	public static void main(String args[]) {
		try {
			// 检查参数个数
			if (args.length < 3) {
				throw new IllegalArgumentException("参数个数有误");
			}
			// 域名和端口
			String host = args[0];
			int port = Integer.parseInt(args[1]);
			// 下面构造待发送报文的字节数组
			byte[] message;
			if (args[2].equals("-f")) {
				// 如果第三个参数为 -f,则表示将文件的内容以UDP方式发送
				// 获得待发送的文件对象以及文件的长度
				File f = new File(args[3]);
				int len = (int) f.length();
				// 创建一个足够容纳文件内容的字节数组
				message = new byte[len];
				FileInputStream in = new FileInputStream(f);
				// 将文件内容以字节的方式读到字节数组中
				int bytes_read = 0, n;
				do {
					n = in.read(message, bytes_read, len - bytes_read);
					bytes_read += n;
				} while ((bytes_read < len) && (n != -1));
			} else {
				// 如果第三个参数不是 -f,则将后面的参数当作消息发送
				String msg = args[2];
				for (int i = 3; i < args.length; i++) {
					msg += " " + args[i];
				}
				message = msg.getBytes();
			}
			// 根据域名获取IP地址
			InetAddress address = InetAddress.getByName(host);
			// 初始化一个UDP包。
			// DatagramPacket的构造方法中必须使用InetAddress,而不能是IP地址或者域名
			DatagramPacket packet = new DatagramPacket(message, message.length,
					address, port);
			// 创建一个DatagramSocket,以发送UDP包
			DatagramSocket dsocket = new DatagramSocket();
			dsocket.send(packet);
			System.out.println("send: " + new String(message));
			dsocket.close();
			// 注意:如果在构造DatagramPacket时,不提供IP地址和端口号,
			// 则需要调用DatagramSocket的connect方法,否则无法发送UDP包
			packet = new DatagramPacket(message, message.length);
			dsocket = new DatagramSocket();
			dsocket.connect(address, port);
			dsocket.send(packet);
			System.out.println("Send: " + new String(message));
			dsocket.close();
		} catch (Exception e) {
			System.err.println(e);
		}
	}
}




JAVA 编程小技巧之UDP发送中文字符乱码问题解决

String sendStr = "Hellow 你好!"; System.out.println(sendStr.length() + " " + sendStr.getBytes().length...
  • wjw521wjw521
  • wjw521wjw521
  • 2017年07月04日 11:51
  • 711

用JAVA和UDP实现字符串的发送和接收

  • 2011年12月05日 17:55
  • 4KB
  • 下载

Java使用UDP协议收发数据简单实现

UDP简介1.UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议!简单Java代码实现!适合初学!...
  • YoutellIdo
  • YoutellIdo
  • 2015年08月07日 18:24
  • 8541

Java基础——实现UDP发送数据和接收数据

有一段时间没有写博客了,差不多两个月了,怎么说呢,这就是那个叫“三分热度”吧,我的三分热度时间不长,但是呢,这个三分热度时不时的来一次,这也是一个小幸运吧。今天来聊聊javaEE 的知识,其实也是网络...
  • qq_25193681
  • qq_25193681
  • 2016年10月11日 14:17
  • 3858

JAVA中UDP 接受与发送数据的初步步骤

UDP是一种高速,无连接的数据交换方式,他的特点是,即使没有连接到(也不许要连接)接收方也可以封包发送,就像在一个多人使用的步话机环境中,你不知道你的信息是否被需要的人接受到,但是你的信息确实被传递然...
  • zzcchunter
  • zzcchunter
  • 2011年11月07日 16:30
  • 22264

UDP 用户数据报文协议的发送和接收示例

UDP是基于数据报文的传输协议,面向无连接,不可靠,下面介绍发送和接收的Demo: 发送程序:import java.io.BufferedReader; import java.io.IOExce...
  • u010698072
  • u010698072
  • 2017年01月18日 18:06
  • 1286

java UDP报文的发送与接收

  • 2010年06月21日 16:49
  • 60KB
  • 下载

java——UDP发送和接收数据

package com.socket;import java.io.IOException; import java.net.DatagramPacket; import java.net.Datag...
  • u011402596
  • u011402596
  • 2015年05月12日 00:08
  • 1486

Java中通过UDP协议发送和接受数据

Java中通过UDP协议发送和接受数据 UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过...
  • yang5726685
  • yang5726685
  • 2016年11月28日 20:45
  • 334

JAVA_UDP发送端和接受端

/* 通过UDP传输方式,将一段文字数据发送出去 1.建立udpsocket服务 2.提供数据,并将数据封装到数据包中。 3.通过socket服务的发送功能。将数据包发出去 4.关闭资源 类:...
  • ZJQLOVELYY
  • ZJQLOVELYY
  • 2013年01月26日 15:53
  • 9726
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java UDP报文的发送与接收
举报原因:
原因补充:

(最多只允许输入30个字)