UDP通讯讲解,读写键盘录入信息

1、DatagramSocket类:构造方法:

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

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

DatagramSocket(int port, InetAddress laddr) 创建数据报套接字,将其绑定到指定的本地地址。

方法:

bind(SocketAddress addr) 将此 DatagramSocket 绑定到特定的地址和端口。

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

connect(InetAddress address, int port) 将套接字连接到此套接字的远程地址。

disconnect()断开套接字的连接

InetAddress getInetAddress() 返回此套接字连接的地址。

InetAddress getLocalAddress()  获取套接字绑定的本地地址。

int getLocalPort() 返回此套接字绑定的本地主机上的端口号。

isBound() 返回套接字的绑定状态。

isClosed() 返回是否关闭了套接字。

isConnected() 返回套接字的连接状态。

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

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


DatagramPacket类:

构造方法:

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

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

DatagramPacket(byte[] buf, int offset, int length)  构造 DatagramPacket,用来接收长度为 length 的包,在缓冲区中指定了偏移量。

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

常用方法:

 InetAddress  getAddress() 返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。

 byte[]  getData() 返回数据缓冲区。

int getLength() 返回将要发送或接收到的数据的长度。

int getPort() 返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。

 SocketAddress  getSocketAddress() 获取要将此包发送到的或发出此数据报的远程主机的 SocketAddress(通常为 IP 地址 + 端口号)。

setAddress(InetAddress iaddr) 设置要将此数据报发往的那台机器的 IP 地址。

setData(byte[] buf) 为此包设置数据缓冲区。

setData(byte[] buf, int offset, int length) 为此包设置数据缓冲区。

setLength(int length) 为此包设置长度。

setPort(int iport) 设置要将此数据报发往的远程主机上的端口号。

/*
UDP通过键盘录入信息,和新方法就是讲读入的数据装到包中。
*/
import java.net.*;
import java.io.*;
import java.lang.Exception;
class  UdpSend
{
	public static void main(String[] args) throws Exception
	{
		DatagramSocket ds =new DatagramSocket();
		BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
		String line = null;
		while((line = bufr.readLine()) != null)				//阻塞式方法,
		{
			if("886".equals(line))
			{
				break;
			}
			byte [] buf = line.getBytes();
			DatagramPacket dp = new DatagramPacket(buf,0,buf.length,InetAddress.getByName("122.88.30.178"),10001);
			ds.send(dp);
		}
	}
}

class UdpReceive
{
	public static void main(String[] args) throws Exception
	{
		DatagramSocket ds = new DatagramSocket(10001);   //发送接收相同端口
		while(true)
		{
			byte [] buf = new byte[1024];
			DatagramPacket dp = new DatagramPacket(buf,buf.length);
			ds.receive(dp);					//阻塞式方法
			String ip = dp.getAddress().getHostAddress();
			String data = new String(dp.getData(),0,dp.getLength());
			System.out.println(ip + ".." + data);
		}
	}
}


原文地址:https://www.cnblogs.com/dengshiwei/p/4258424.html