Java程序设计 网络编程 UDP程序设计

在Java中网络编程可以使用TCP与UDP两种协议模式

UDP简介

TCP的所有操作都必须建立可靠的连接,这样肯定会浪费大量的系统性能。为了减少这种开销,在网络中又提供了另外一种传输协议—UDP(不可靠的连接)协议,这种协议在各个聊天工具中被广泛地应用

使用UDP发送出去的信息,对方不一定会接收到。所有的信息使用数据报的形式发送出去,所以这就要求客户端要始终等待服务器发送的消息才能进行接收,在Java中使用DatagramSocket类和DatagramPacket类完成UDP程序的开发

DatagramPacket类

方法

作用

public DatagramPacket(byte[] buf,int length)

实例化DatagramPacket对象时,指定接收数据长度

public DatagramPacket(byte[] buf,int length,InetAddress address,int port)

实例化DatagramPacket对象时,指定发送的数据、数据的长度、目标地址及端口

public byte[] getData()

返回接收的数据

public int getLength()

返回要发送或接收数据的长度

DatagramSocket类

方法

作用

public DatagramSocket(int port) throws SocketException

创建DatagramPacket对象,并指定监听的端口

public void send(DatagramPacket p) throws IOException

发送数据报

public void receive(DatagramPacket p) throws IOException

接收数据报

UDP客户端

import .DatagramPacket;
import .DatagramSocket;

public class Hello {
public static void main(String[] args) throws Exception{
DatagramSocket ds = null;
byte[] buf = new byte[1024];
DatagramPacket dp = null;
ds = new DatagramSocket(8889);
dp = new DatagramPacket(buf,1024);
System.out.println("等待接收");
ds.receive(dp);
String str = new String(dp.getData(),0,dp.getLength())+
"from"+dp.getAddress().getHostAddress()+":"+dp.getPort();
System.out.println(str);
ds.close();
}
}

Java程序设计 网络编程 UDP程序设计_网络

客户端程序已经打开了监听端口,等待服务器端向客户端发送信息

UDP发送的服务器端

import .DatagramPacket;
import .DatagramSocket;
import .InetAddress;
import java.nio.charset.StandardCharsets;

public class Hello2 {
public static void main(String[] args) throws Exception{
DatagramSocket ds = null;
DatagramPacket dp = null;
ds = new DatagramSocket(3000);
String str = "HELLO";
dp = new DatagramPacket(str.getBytes(),str.length(), InetAddress.getByName("localhost"),8889);
System.out.println("发送信息");
ds.send(dp);
ds.close();
}
}

Java程序设计 网络编程 UDP程序设计_数据_02

Java程序设计 网络编程 UDP程序设计_udp_03