java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了 java Socket UDP 实例详解的相关资料, 需要的朋友可以参考下
UDP 编程示例
服务器端:
- package socket;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.SocketException;
- public class UDPServer {
- public static void main(String[] args) throws IOException {
- byte[] buf = new byte[1024];
- DatagramPacket dp = new DatagramPacket(buf, buf.length); // 声明一个用来接收数据的包裹
- DatagramSocket ds = new DatagramSocket(5678); // 指定的是 UDP 中的端口号 5678, 在 TCP 中, 还有另外一个端口号为 5678 的端口
- while (true) {
- ds.receive(dp); // 阻塞式的
- System.out.println(new String(buf, 0, dp.getLength())); //dp 中获取的数据的长度
- }
- }
- }
客户端:
- package socket;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetSocketAddress;
- import java.net.SocketException;
- public class UDPClient {
- public static void main(String[] args) throws IOException {
- byte[] buf = new String("Hello").getBytes();
- //UDP 是无连接的, 所以要在发送的数据包裹中指定要发送到的 ip:port
- DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678));
- DatagramSocket ds = new DatagramSocket(9999); // 指明发送端的端口号
- ds.send(dp);
- ds.close();
- }
- }
说明:
1. 严格意义上来讲, UDP 没有 server 和 client 之分, 不像 TCP 中有 ServerSocket 和 Socket,UDP 中只有 DatagramSocket
2. UDP 和 TCP 的端口是分开的, 例如 UDP 有一个端口号为 5678 的端口, TCP 也有一个端口号为 5678 的端口
3. UDP 是无连接的, 所以要在发送的数据包裹中指定要发送到的 ip:port
4. 如果要发送 longint 等类型的数据, 则需要使用到 ByteArrayOutputStreamDataOutputStreamByteArrayInputStreamByteArrayInputStream 流类型, 如下:
服务器端:
- package socket;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.SocketException;
- public class UDPServer {
- public static void main(String[] args) throws IOException {
- byte[] buf = new byte[1024];
- DatagramPacket dp = new DatagramPacket(buf, buf.length);
- DatagramSocket ds = new DatagramSocket(5678);
- ByteArrayInputStream bais = null;
- DataInputStream dos = null;
- while (true) {
- ds.receive(dp);
- bais = new ByteArrayInputStream(buf);
- dos = new DataInputStream(bais);
- System.out.println(dos.readLong());
- }
- }
- }
客户端:
- package socket;
- import java.io.ByteArrayOutputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetSocketAddress;
- import java.net.SocketException;
- public class UDPClient {
- public static void main(String[] args) throws IOException {
- byte[] buf = null;
- long l = 100000L;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- dos.writeLong(l);
- buf = baos.toByteArray();
- DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678));
- DatagramSocket ds = new DatagramSocket(9999);
- ds.send(dp);
- ds.close();
- dos.close();
- }
- }
来源: http://www.phperz.com/article/18/0213/358642.html