UDP网络编程
IP地址和端口
IP地址:是计算机在网络中的唯一标示,我们在进行网络编程时一定要定位到远程计算机,而IP地址就是解决这个问题的。
端口:除了计算机外我们还要定位到具体的应用程序进程,而端口就是给应用程序分配的身份标示。
UDP和TCP
UDP:1,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。
2,UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64kB之内。
3,UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。
TCP:1,面向连接的协议,在socket之间进行数据传输之前必须要建立连接,是通过三次握手来建立连接的,所以在TCP中需要连接时 间。
2,TCP传输数据大小限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大的数据。
3,TCP是一个可靠的协议,它确保接收方完全正确的获取发送方所发送的全部数据。
数据帧格式
Socket
简单理解下,Socket就是一个应用程序编程的机制和一种接口,可以理解为是应用程序创建的一个港口码头,应用程序只要把装着货物的集装箱(在程序中就
是要通过网络发送的数据)放到港口码头上,就算完成了货物的运送,剩下来的工作就由货运公司去处理了(在计算机中由驱动程序来充当货运公司)。如果把
DatagramSocket比喻为创建的港口码头,那么DatagramPacket就是我们发送和接收数据的集装箱。
关于InetAddress类
java中的InetAddress 类是一个代表IP地址的封装。IP地址可以由字节数组和字符串来分别表示,InetAddress将IP地址以对象
的形式进行封装,可以更方便的操作和获取其属性。InetAddress没有构造方法,可以通过两个静态方法获得它的对象。
public class IPDemo {
/**
* @param args
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException {
//获取本地主机ip对象。
// InetAddress ip = InetAddress.getLocalHost();
InetAddress ip = InetAddress.getByName("192.168.1.252");
//获取ip对象中的ip地址字符串。或者ip地址对应的主机名称。
System.out.println(ip.getHostAddress());
System.out.println(ip.getHostName());
}
}
UDP编程
接收端
public class UDPRece {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
/*
* udp的接收端:
* 思路:
* 1,创建udpsocket服务。
* 2,接收数据并存储到数据包中,存储到数据包中的目的是为了解析接收到的数据。
* 3,将解析到的数据打印到显示器。
* 4,关闭服务。
*/
System.out.println("udp 接收端开启");
//1,创建udp的socket服务。用于接收端,一定要指定端口,因为必须要明确从哪个端口来的数据是这个应用程序所能解析的。
//简单说:接收端必须监听一个端口。
DatagramSocket ds = new DatagramSocket(10000);
//2,接收数据到数据包中。
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
ds.receive(dp);
//3,解析数据包中的具体数据。
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
String text = new String(dp.getData(),0,dp.getLength());
System.out.println(ip+":::"+port+":::::"+text);
//4,关闭资源。
ds.close();
System.out.println("udp 接收端关闭");
}
}
发送端
public class UDPSend {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
/*
* 通过udp协议创建一个发送端。
* 思路:
* 1,应该有可以通过该协议传输数据的对象。先有udp服务。
* 2,有数据,并将数据封装到数据包,并在包上明确目的地址。
* 3,通过udp服务将这个数据包发出去。
* 4,关闭资源。
*/
System.out.println("udp 发送端开启");
//1,创建udp socket服务.
DatagramSocket ds = new DatagramSocket(8888);
//2,明确数据,并将数据封装到数据包中。
String str = "udp演示,哥们来了";
byte[] buf = str.getBytes();
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.252"),10000);
//3,将数据包通过socket服务发送。
ds.send(dp);
//4,关闭资源。
ds.close();
System.out.println("udp 发送端关闭");
}
}