/*
UDP
1,将数据及源和目的封装成数据包中,不需要建立连接
2,每个数据报的大小在限制在64k
3,因为无连接,是不可靠协议的
4,不需要建立连接,速度快
TCP
1,建立连接,形成传输数据的通道
2,在连接中进行最大数据量传输
3,通过三次握手完成连接,是可靠传输协议
4,必须建立连接,效率会稍低
Socket
1,Socket 就是为了网络服务提供的一种机制
2,通信的两端都有Socket
3,网络通信其实就是Socket之间的通信
4,数据在两个Socket间通过IO传输
*/
import java.net.*;
import java.io.*;
//发送端
class UDPSend
{
public static void main(String []args) throws Exception
{
//1,创建UDP服务 通过DatagramSocket 对象
DatagramSocket ds = new DatagramSocket();
//键盘录入
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = bufr.readLine()) != null)
{
if("Bye".equals(line))
break;
//将字符串转变成字节流
byte [] buf = line.getBytes();
//2,确定数据 并封装成数据包
DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName("127.1"),1000);
//3 通过socket 服务 将已有的数据包发送出去 通过send 方法
ds.send(dp);
}
//关闭资源
ds.close();
}
}
class UDPRecv
{
public static void main(String []args) throws Exception
{
// 1 创建UDP socket 此处设置端口号为1000
DatagramSocket ds = new DatagramSocket(1000);
while(true)
{
//2 定义数据包 用于存储数据
byte []buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//3 通过服务的receive 方法将收到的数据存入数据包中
ds.receive(dp);
//4 通过数据包的方法获取其中的数据
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());
System.out.println(ip + "::"+data);
}
//关闭资源
ds.close();
}
}