UDP:用户数据报协议
特点:面向无连接,数据是不安全,不完整
优点:效率高
比如:发短信,供屏软件,QQ视频
TCP:传输控制协议
特点:面向有连接,数据是安全,完整性
比如:打电话,上网
TCP协议建立连接 有三个步骤 我们称为"三次握手"
UDP 发送方步骤
//1.创建DatagramSocket对象
DatagramSocketds = new DatagramSocket();
//2.创建DatagramPacket对象
//存储 发送的数据,对方的IP,端口号
byte[]bs = "我爱你".getBytes();
//IP地址:127.0.0.1 代表本机,本地回环地址
DatagramPacketdp = new DatagramPacket(bs,bs.length,InetAddress.getByName("127.0.0.1"),12345);
//3.发送
ds.send(dp);
System.out.println("发送数据成功!!!");//192.168.146.72
//4.关闭资源
ds.close();
UDP 接收方步骤
//1.创建DatagramSocket对象,
//强调:接收端必须指定一个端口号
DatagramSocketds = new DatagramSocket(12345);
//2.直接创建一个DatagramPacket对象
byte[]bs = new byte[1024];
DatagramPacketdp = new DatagramPacket(bs, bs.length);
//3.接收
System.out.println("等待发送端发送数据....");
ds.receive(dp);//这个方法具有等待功能,等待发送端发送过来的数据
System.out.println("接收数据成功!!");
//获取发送端的地址
InetAddresssendAddress = dp.getAddress();
System.out.println("发送端是:"+sendAddress.getHostAddress());
//获取真正的数据
byte[]data = dp.getData();
//获取发送端 发来了多少字节
intlen = dp.getLength();
//打印数据
StringreceiveMsg = new String(data, 0, len);
System.out.println("发送端说:"+receiveMsg);;
//4.关闭资源
ds.close();
TCP 客户端步骤
// 1.创建一个客户端对象(注意:指定这个Socket要连接的服务器的IP和端口)
/*
* 这个构造方法干了很多事情:
* a.自动去连接服务器
* b.自动进行三次握手,建立连接
* c.自动为连接中创建两个流
*/
Socketclient = new Socket("127.0.0.1", 12345);
// 2.从客户端对象中获取 输出流:getOutputStream()
//OutputStreamout = client.getOutputStream();
// 3.调用输出流的Write方法写数据到服务器即可
//out.write("Howare you".getBytes());
client.getOutputStream().write("Howare you".getBytes());
System.out.println("给服务器发送数据成功!!");
// 4.关闭资源
client.close();
}
TCP 服务器端步骤
//1.创建一个ServerSocket对象,必须绑定一个端口,这个端口必须和客户端连接的端口一致
ServerSocketserver = new ServerSocket(12345);
//2.获取到 哪一个 客户端连接的我
System.out.println("等待客户端连接...");
Socketclient = server.accept();//此方法也具有等待功能,等待某一个客户端连接
//打印一些和客户端有关信息
Stringip = client.getInetAddress().getHostAddress();
System.out.println("小样,抓到你了:"+ip);
//3.获取输入流,实际上是客户端写数据时的输出流
InputStreamin = client.getInputStream();
//4.读取数据
byte[]bs = new byte[1024];
intlen = in.read(bs);
//打印
System.out.println("客户端说:"+newString(bs,0,len));
//5.关闭资源
server.close();
client.close();
in.close();