网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来.
在java中提供了java.net包,其中包含类和接口.它们提供低层次的通信细节.我们可以直接使用这些类和接口,专门解决问题.
互联网的三大基石: url html http
java.net包中提供了两种常见的网络协议的支持:
UDP: 用户数据报协议的缩写.非面向连接 , 不安全, 协议简单,开销小,效率高, 大小有限制,一般不超过60k
TCP:面向连接, 安全,效率低 . 基于3次握手: 1.拨号 2.响应,连接上 3.发送数据
使用DatagramSocket指定端口,创建发送端
准备数据 一定要转成字节数组
封装成DatagramPacket包裹
发送包裹send(DatagramPacket p)
释放资源
发送端示例1:
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; public class UDPSend1 { public static void main(String[] args) throws Exception { System.out.println("发送方启动中..."); // 1.使用DatagramSocket指定端口,创建发送端 DatagramSocket client = new DatagramSocket(6666); // 2.准备数据 一定要转成字节数组 String data = "落霞与孤鹜齐飞,秋水共长天一色"; byte[] datas = data.getBytes(); // 3.封装成DatagramPacket包裹 DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("localhost", 8888)); // 4.发送包裹send(DatagramPacket p) client.send(packet); // 5.释放资源 client.close(); } } 复制代码
使用DatagramSocket指定端口,创建接收端
准备容器,封装成DatagramPacket包裹
阻塞式接收包裹receive(DatagramPacket p)
分析数据
释放资源
接收端示例1:
import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPReceive1 { public static void main(String[] args) throws Exception { System.out.println("接收端准备中.... "); // 1.使用DatagramSocket指定端口,创建接收端 DatagramSocket server = new DatagramSocket(8888); // 2.准备容器,封装成DatagramPacket包裹 byte[] container = new byte[1024 * 60]; DatagramPacket packet = new DatagramPacket(container, 0, container.length); // 3.阻塞式接收包裹receive(DatagramPacket p) server.receive(packet); // 4.分析数据 byte[] datas = packet.getData(); int len = packet.getLength(); System.out.println(new String(datas, 0, len)); // 5.释放资源 server.close(); } } 复制代码
定义客户端 Socket Socket(String host, int port) 创建一个流套接字连接到指定主机上的指定端口号
准备数据
写出 IO操作
释放资源
客户端示例2:
import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; public class Client01 { public static void main(String[] args) throws UnknownHostException, IOException { System.out.println("-------------Client-----------"); //1.定义客户端 Socket Socket(String host, int port) Socket client=new Socket("127.0.0.1",7777); //2.准备数据 String str="name=zhangsan&pwd=123"; //3.写出 直接从管道中获取流 DataOutputStream data=new DataOutputStream(client.getOutputStream()); data.writeUTF(str); data.flush(); //4.关闭 data.close(); client.close(); } } 复制代码
定义服务端 ServerSocket ServerSocket(int port) 创建一个服务器套接字绑定到指定端口
阻塞式监听 Socket accept()
监听连接套接字并接受它
io操作
释放资源
服务端示例2:
import java.io.DataInputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server01 { public static void main(String[] args) throws IOException { System.out.println("-------------Server-----------"); //1.定义服务端 ServerSocket server=new ServerSocket(7777); //2.阻塞式监听 Socket accept() Socket client=server.accept(); //3.io操作,直接从管道中获得流 DataInputStream in=new DataInputStream( client.getInputStream()); String str=in.readUTF(); System.out.println(str); //4.释放资源 in.close(); client.close(); server.close(); } } 复制代码