【Java高级特性】java学习之旅36-网络编程

【Java高级特性】java学习之旅36-网络编程网络通信协议 应用层 HTTP 超文本传输协议 FTP 文本传输协议 SMTP 邮件发送协议 POP 邮件接收协议 传输层 TCP 传输控制协议 三次握手 UDP 用户数据包协议 网络层 IP 网络协议 数据链路层

大家好,我是讯享网,很高兴认识大家。

网络通信协议:

  1. 应用层:
  • HTTP:超文本传输协议
  • FTP:文本传输协议
  • SMTP: 邮件发送协议
  • POP: 邮件接收协议
  1. 传输层:
  1. 网络层
  • IP: 网络协议
  1. 数据链路层
  2. 物理层

IP:

  1. 网络地址:唯一标识网络上的每一台计算机
  2. 地址组成:32位,由4个8位二进制数组成。
  3. 本地ip的表现形式:
  1. 127.0.0.1
  2. localhost
  3. 局域网ip(可以使用ipconfig指令查询)
  4. 广域网ip(百度直接搜索ip)
  1. 常用的指令:
  1. ipconfig: 查看本机所有网络的配置
  2. ping: 可以测试网络是否通畅,可以查看域名映射的ip

DNS:

  1. Domain Name System, 域名解析系统
  2. DNS是一个分布式服务器系统,实现了域名和ip地址的隐射
  3. 我们请求域名(www.baidu.com),会先进行DNS的解析,得到ip地址后,继续请求ip地址对应的主机。

java.net包下的类

1. URL类:

url:统一资源定位符,例如:http://www.longge.vip//study/javacore.avi;

分析:协议://域名(ip)/资源路径/资源名


讯享网

  1. 构造方法
URL url = new URL("http://www.longge.vip/study.java"); System.out.println(url); 

讯享网
  1. encode(),将网站中的中文字符加密
讯享网String encodeStr = URLEncoder.encode("http://www.longge.vip/study","utf-8"); 
  1. 将网址中的乱码解码 decode();
String decoderStr = URLDecoder.decode(emcoderStr,"utd-8") 
  1. 查看本机的ip
讯享网InetAddress localHost = InetAddress.getLocalHost(); 
  1. 查看域名映射的ip
InetAddress ip1 = InetAddress.getByName("www.baidu.com"); 
  1. 查看域名映射的所有ip
讯享网InetAddress[] ips = InetAddress.getAllByName("www.taovao.com"); 
  1. 通过ip地址创建对象
InetAddress ip2 = InetAddress.getByAddress(new byte[] { 
   (byte)192, (byte)168, 1, (byte)172}); 

实现网络编程:

  • TCP + Socket实现网络编程
  • UDP + Socket实现网络编程
TCP UDP
面向连接的 面向非连接
是安全的 是不安全的
比较慢 比较快
适合传输大文件 适合传输小文件
  1. 再客户端或者服务端通过socket.shutdownOutput()都是单项关闭的,即关闭客户端的输出流并不会关闭服务端的输出流,所以是一种单方向的关闭流
  2. 通过socket.shutdownOutput()关闭输出流,但socket任然是连接状态,连接并未关闭
  3. 如果直接关闭输入流或者输出流,即: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(); } 
小讯
上一篇 2025-03-09 23:03
下一篇 2025-01-24 22:19

相关推荐

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