服务器端收发代码:
public static void main(String[] args) throws IOException {
/*
* 接收客户端发送的数据
*/
// 1.创建服务器端DatagramSocket,指定端口 默认本地ip地址
DatagramSocket socket = new DatagramSocket(12345);
// 2.创建数据报,用于接收客户端发送的数据
byte[] data = new byte[1024];// 创建字节数组,指定接收的数据包的大小
DatagramPacket packet = new DatagramPacket(data, data.length);
// 3.接收客户端发送的数据
System.out.println("****服务器端已经启动,等待客户端发送数据");
socket.receive(packet);// 此方法在接收到数据报之前会一直阻塞
//*************此方法在接收到数据报之前会一直阻塞*************************
// 4.读取数据
String info = new String(data, 0, packet.getLength());
System.out.println("我是服务器,客户端说:" + info);
/*
* 服务器向客户端响应数据
*/
// 1.定义客户端的地址、端口号、数据
InetAddress ip = packet.getAddress();//获取数据来源ip地址
int port = packet.getPort();//获取数据来源端口
byte[] data2 = "服务器测试数据".getBytes();
// 2.创建数据报,包含响应的数据信息
DatagramPacket packet2 = new DatagramPacket(data2, data2.length, ip, port);
// 3.响应客户端
socket.send(packet2);
// 4.关闭资源
socket.close();
}
控制台输出:
****服务器端已经启动,等待客户端发送数据
我是服务器,客户端说:客户端测试数据
Process finished with exit code 0
2、客户端收发代码:
public static void main(String[] args) throws IOException {
InetAddress ip = InetAddress.getLocalHost(); //获取本地的ip地址
int port = 12345;
// InetAddress ip = InetAddress.getByName(); //在给定主机名的情况下确定主机的IP地址.如果参数为null,获得的是本机的IP地址
byte[] data = "客户端测试数据".getBytes();
// 2.创建数据报,包含发送的数据信息
DatagramPacket packet = new DatagramPacket(data, data.length, ip, port);
// 3.创建DatagramSocket对象
DatagramSocket socket = new DatagramSocket();
// 4.向服务器端发送数据报
socket.send(packet);
//*****************开始向服务器发送数据,等待向应中*********************
/*
* 接收服务器端响应的数据
*/
// 1.创建数据报,用于接收服务器端响应的数据
byte[] data2 = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
// 2.接收服务器响应的数据
socket.receive(packet2);
// 3.读取数据
String reply = new String(data2, 0, packet2.getLength());
System.out.println("我是客户端,服务器说:" + reply);
// 4.关闭资源
socket.close();
}
控制台输出:
我是客户端,服务器说:服务器测试数据
Process finished with exit code 0
什么是Socket?
- Socket就是为网络服务提供的一种机制。
- 通讯的两端都有Sokcet
- 网络通讯其实就是Sokcet间的通讯
- 数据在两个Sokcet间通过IO传输。
- TCP与UDP在概念上的区别:
TCP与UDP在概念上的区别:
UDP: a、是面向无连接, 将数据及源的封装成数据包中,不需要建立连接
b、每个数据报的大小在限制64k内
c、因无连接,是不可靠协议
d、不需要建立连接,速度快
TCP: a、建议连接,形成传输数据的通道.
b、在连接中进行大数据量传输,以字节流方式
c 通过三次握手完成连接,是可靠协议
d 必须建立连接m效率会稍低