DatagramSocket类
此类用于表示发送和接收数据报包的套接字。
DatagramSocket(int port)
:创建数据报套接字,并将其绑定到本地主机上的指定端口。DatagramSocket(int port, InetAddress laddr)
:创建数据报套接字,将其绑定到指定的本地地址。receive(DatagramPacket p)
:从此套接字接收数据报包。void send(DatagramPacket p)
:向此套接字发送数据报包。bind(SocketAddress addr)
:将此DatagramSocket
绑定到特定的地址和端口。void close()
:关闭此数据报套接字。void connect(InetAddress address, int port)
:连接到此套接字的远程地址。void connect(SocketAddress addr)
:连接到此套接字的远程地址(IP
地址和端口号)。void disconnect()
:断开套接字的连接。getInetAddress()
:返回此套接字连接的地址。InetAddress getLocalAddress()
:获取套接字绑定的本地地址。
InetAddress类
InetAddress
是一个用于表示计算机IP
地址的类,而IP地址经常用192.168.0.1
、WWW.it315.org
等字符串格式表示。主要有getByName
和getHostAddress
方法。
DatagramPacket类
如果把DatagramSocket
比作港口码头,那么DatagramPacket
就是发送和接收数据的集装箱。
DatagramPacket(byte[] buf, int length)
:构造DatagramPacket
,用来接收长度为length
的包。DatagramPacket(byte[] buf, int length, InetAddress address, int port)
:构造数据报文包,用来把长度为length
的包传送到指定宿主的指定的端口号。getAddress()
:返回接收或发送此数据报文的机器的IP地址。getData()
:返回接收的数据或发送出的数据。getLength()
:返回发送出的或接收到的数据的长度。getPort()
:返回接收或发送该数据报文的远程主机端口号。
UDP
客户端如下:
import java.net.*;
public class UdpSend {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket();
String strInfo = "Hello World";
byte[] send_buf = strInfo.getBytes();
InetAddress address = InetAddress.getByName("192.168.1.108");
int port = 9999;
DatagramPacket packet = new DatagramPacket(send_buf, send_buf.length, address, port);
ds.send(packet);
ds.close();
}
}
UDP
服务器如下:
import java.net.*;
public class UdpRecv {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(9999);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, 1024);
ds.receive(dp);
String strInfo = new String(dp.getData(), 0, dp.getLength());
strInfo += " from " + dp.getAddress().getHostAddress() + ":" + dp.getPort();
System.out.println(strInfo);
ds.close();
}
}