package com.baowen.com; 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); } } }
仔细一看,server,client别放一个文件里啊... publicclass <spanstyle="font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;font-size:14px;line-height:15.399999618530273px;background-color:#FFFFFF;">UDPClient... publicclassUDPServer~~~然后再跑,错了看出错信息...别只光顾着打字母,然后被一些可能是因为是某个关键字敲错而报的错误吓到~
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。