UDP通讯实现

UDP通讯实现

简单实现UDP网络编程。

DatagramSocket:用于发送或接收数据报包

当服务器要向客户端发送数据时,需要在服务器端产生一个DatagramSocket对象,在客户端产生一个DatagramSocket对象。服务器端的DatagramSocket将DatagramPacket发送到网络上,然后被客户端的DatagramSocket接收。

DatagramSocket有两种常用的构造函数。一种是无需任何参数的,常用于客户端;另一种需要指定端口,常用于服务器端。如下所示:

DatagramSocket() :构造数据报套接字并将其绑定到本地主机上任何可用的端口。

DatagramSocket(int port) :创建数据报套接字并将其绑定到本地主机上的指定端口。

常用方法:

send(DatagramPacket p) :从此套接字发送数据报包。

receive(DatagramPacket p) :从此套接字接收数据报包。

close() :关闭此数据报套接字。

DatagramPacket:数据容器(封包)的作用

此类表示数据报包。 数据报包用来实现封包的功能。

常用方法:

DatagramPacket(byte[] buf, int length) :构造数据报包,用来接收长度为 length 的数据包。

DatagramPacket(byte[] buf, int length, InetAddress address, int port) :构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

getAddress() :获取发送或接收方计算机的IP地址,此数据报将要发往该机器或者是从该机器接收到的。

getData() :获取发送或接收的数据。

setData(byte[] buf) :设置发送的数据。

UDP通信编程基本步骤:

  1. 创建客户端的DatagramSocket,创建时,定义客户端的监听端口。

  2. 创建服务器端的DatagramSocket,创建时,定义服务器端的监听端口。

  3. 在服务器端定义DatagramPacket对象,封装待发送的数据包。

  4. 客户端将数据报包发送出去。

  5. 服务器端接收数据报包。

    UDP客户端:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class UDP_Test {
    public static void main(String[] args) throws Exception {
    byte[] b = "你好".getBytes();
    //必须告诉数据报包要发到哪台计算机的哪个端口,发送的数据以及数据的长度
    DatagramPacket d = new DatagramPacket(b,b.length,new
    InetSocketAddress("localhost",7777));
    //创建数据报套接字:指定发送信息的端口
    DatagramSocket ds = new DatagramSocket(6000);
    //发送数据报包
    ds.send(d);
    //关闭资源
    ds.close();
    }
    }

UDP服务器端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class UDP_Test2 {
public static void main(String[] args) throws Exception {
//创建数据报套接字:指定接收信息的端口
DatagramSocket d = new DatagramSocket(7777);
byte[] b = new byte[1024];
//创建数据报包,指定要接收的数据的缓存位置和长度
DatagramPacket dp = new DatagramPacket(b, b.length);
//接收客户端发送的数据报
d.receive(dp); // 阻塞式方法
//dp.getLength()返回实际收到的数据的字节数
String string = new String(dp.getData(), 0, dp.getLength());
System.out.println(string);
//关闭资源
d.close();
}
}

UDP基本数据类型传递客户端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Client {
public static void main(String[] args) throws Exception {
long n = 2000L;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeLong(n);
//获取字节数组流中的字节数组(我们要发送的数据)
byte[] b = bos.toByteArray();
//必须告诉数据报包要发到哪台计算机的哪个端口,发送的数据以及数据的长度
DatagramPacket dp = new DatagramPacket(b,b.length,new
InetSocketAddress("localhost",8999));
//创建数据报套接字:指定发送信息的端口
DatagramSocket ds = new DatagramSocket(9000);
//发送数据报包
ds.send(dp);
//关闭资源
dos.close();
bos.close();
ds.close();
//来源于尚学堂
}
}

UDP基本数据类型传递服务器端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Server {
public static void main(String[] args) throws Exception {
//创建数据报套接字:指定接收信息的端口
DatagramSocket ds = new DatagramSocket(8999);
byte[] b = new byte[1024];
//创建数据报包,指定要接收的数据的缓存位置和长度
DatagramPacket dp = new DatagramPacket(b, b.length);
//接收客户端发送的数据报
ds.receive(dp); // 阻塞式方法
//dp.getData():获取客户端发送的数据,返回值是一个字节数组
ByteArrayInputStream bis = new ByteArrayInputStream(dp.getData());
DataInputStream dis = new DataInputStream(bis);
System.out.println(dis.readLong());
//关闭资源
dis.close();
bis.close();
ds.close();
//来源于尚学堂
}
}
原创技术分享,您的支持将鼓励我继续创作
0%