网络通信协议:
- 应用层:
- HTTP:超文本传输协议
- FTP:文本传输协议
- SMTP: 邮件发送协议
- POP: 邮件接收协议
- 传输层:
- 网络层
- IP: 网络协议
- 数据链路层
- 物理层
IP:
- 网络地址:唯一标识网络上的每一台计算机
- 地址组成:32位,由4个8位二进制数组成。
- 本地ip的表现形式:
- 127.0.0.1
- localhost
- 局域网ip(可以使用ipconfig指令查询)
- 广域网ip(百度直接搜索ip)
- 常用的指令:
- ipconfig: 查看本机所有网络的配置
- ping: 可以测试网络是否通畅,可以查看域名映射的ip
DNS:
- Domain Name System, 域名解析系统
- DNS是一个分布式服务器系统,实现了域名和ip地址的隐射
- 我们请求域名(www.baidu.com),会先进行DNS的解析,得到ip地址后,继续请求ip地址对应的主机。
java.net包下的类
1. URL类:
url:统一资源定位符,例如:http://www.longge.vip//study/javacore.avi;
分析:协议://域名(ip)/资源路径/资源名
- 构造方法
URL url = new URL("http://www.longge.vip/study.java"); System.out.println(url);
讯享网
- encode(),将网站中的中文字符加密
讯享网String encodeStr = URLEncoder.encode("http://www.longge.vip/study","utf-8");
- 将网址中的乱码解码 decode();
String decoderStr = URLDecoder.decode(emcoderStr,"utd-8")
- 查看本机的ip
讯享网InetAddress localHost = InetAddress.getLocalHost();
- 查看域名映射的ip
InetAddress ip1 = InetAddress.getByName("www.baidu.com");
- 查看域名映射的所有ip
讯享网InetAddress[] ips = InetAddress.getAllByName("www.taovao.com");
- 通过ip地址创建对象
InetAddress ip2 = InetAddress.getByAddress(new byte[] {
(byte)192, (byte)168, 1, (byte)172});
实现网络编程:
- TCP + Socket实现网络编程
- UDP + Socket实现网络编程
| TCP | UDP |
|---|---|
| 面向连接的 | 面向非连接 |
| 是安全的 | 是不安全的 |
| 比较慢 | 比较快 |
| 适合传输大文件 | 适合传输小文件 |
- 再客户端或者服务端通过socket.shutdownOutput()都是单项关闭的,即关闭客户端的输出流并不会关闭服务端的输出流,所以是一种单方向的关闭流
- 通过socket.shutdownOutput()关闭输出流,但socket任然是连接状态,连接并未关闭
- 如果直接关闭输入流或者输出流,即:in.close()或者out.close().会直接关闭socket
TCP + Socket 网络编程:
讯享网//TCP client private static Scanner sc = new Scanner(System.in); public stataic void main(Stringp[[ args) throes Exception{
//1. 创建Socket对象,指定主机地址和端口号 Socket client = new Socket("localhost" , 1904); System.out.println("客户端启动完毕!"); //2.创建一个输出流用于发送数据给主机 DataOuputStream dos = new DataOutputStream(client.getOutputStream()); //3.发送数据 dos.writeUTF(sc.next()); //4. 创建一个输入流用于接收服务器发送的数据 DataInputStream dis = new DataInputStream(client.getInputStream()); //5.接收服务器发送的请求 String message = dis.readUTF(); System.out.println(message); }
//TCP server //1.创建ServerSocket对象,指定端口号 ServerSocket server = new ServerSocket(1904); System.out.println("服务器启动完毕"); //2. 监听客户端请求 Socket client = server.accept(); System.out.println("服务器监听到客户端连接!") //3. 创建输入流用于接收客户端发送的数据 DataInputStream dis = new DataInputStream(client.getInputStream()); //4. 获取客户端发送的数据 String message = dis,readUTF(); System.out.println(message); //5.创建输出流用于发送消息到客户端 DataOutputStream dos = new DataOutputStream(client.getOutputStream()); //6. 发送数据 dos.writeUTF("你好,我是服务器"); //7.关闭资源 dos.close(); dis.close(); client.close(); server.close();
UDP + Socket 实现网络编程:
讯享网//client1 public static void main(String[] args) throws IOException{
//1. 创建DatagramSocket对象,指定端口号 DatagramSocket client1 = new DatagramSocket(6666); //2. 创建DatagramPaclet对象,用于包装数据 String message = "hello, 我是客户端1"; DatagramPacket packet = new DatagramPacket(message.getBytes(), message.getBytes().length, InetAddress.getByName("localhost"), 8888); //3. 发送打包好的数据 client1.send(packet); //4. 关闭资源 client1.close(); }
//client2 public static void main(String[] args) throws Exception{
//1. 创建DatagramSocket对象 DatagramSocket client2 = new DatagramSocket(8888); //2. 接收客户端1发来的请求 byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); client2.receive(packet); //3. 查看接收到的数据 byte[] data = packet.getData(); System.out.println(new String(data); //关闭资源 client2.close(); }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/72460.html