Java网络编程

网络编程

文章目录

  • 网络编程
    • 1. 网络编程概述
      • 1.1 软件架构
      • 1.2 网络基础
    • 2. 网络通信要素
      • 2.1 如何实现网络中主机互相通信
      • 2.2 通信要素1:IP地址
      • 2.3 通信要素2:端口号
      • 2.4 通信要素3:网络通信协议
      • 2.5 InetAddress的使用
    • 3. 传输层协议:TCP和UDP
      • 3.1 TCP协议与UDP协议
    • 4. URL编程

1. 网络编程概述

  • Java提供网络类库,可以实现网络连接。

  • Java实现的跨平台的网络库,程序员面对的是一个统一的网络编程环境

1.1 软件架构

  • C/S架构:客户端和服务器
  • B/S架构:浏览器和服务器(小程序)

1.2 网络基础

  • 计算机网络:把不同区域的计算机与外部设备互联成网络系统,更方便传递信息,数据资源

  • 网络编程目的:直接或间接通过网络协议与其他计算机实现数据交换,进行通讯

2. 网络通信要素

2.1 如何实现网络中主机互相通信

  • 要想实现网络通信,需要解决的三个问题:

    • 问题1:如何准确地定位网络上一台或多台主机

    • 问题2:如何定位主机上的特定的应用

    • 问题3:找到主机后,如何可靠、高效地进行数据传输

  • 实现网络传输的三个要素:(对应解决三个问题)

    使用IP地址(准确地定位网络上一台或多台主机)

    使用端口号(定位主机上的特定的应用)

    规范网络通信协议(可靠、高效地进行数据传输)

2.2 通信要素1:IP地址

  • 作用:IP地址用来给网络中的一台计算机设备做唯一的编号

  • IP地址分类

    IP地址分类方式1:IPv4(占用4个字节)
    			   IPv6(占用16个字节)
    IP地址分类方式2:公网地址(万维网使用)
    			   私有地址(局域网使用,以192.168开头)
    
  • 本地回路地址:127.0.0.1

  • 域名(也就是网址):便于记录 ip 地址

2.3 通信要素2:端口号

  • 可以唯一标识主机中的进程(应用程序)
  • 不同的进程分配不同的端号
  • 范围:0~65535

2.4 通信要素3:网络通信协议

  • 网络通信协议的目的:为了实现可靠而高效的数据传输

  • 网络参考模型

    OSI参考模型:将网络分为7层,过于理想化,没有实施起来。
    TCP/IP参考模型:将网络分为4层:应用层、传输层、网络层、物理+数据链路层。事实上使用的标准。
    

2.5 InetAddress的使用

  • 作用:InetAddress类的一个实例就代表一个具体的ip地址

  • 实例化方式

    InetAddress getByName(String host):获取指定ip对应的InetAddress的实例
    InetAddress getLocalHost():获取本地ip对应的InetAddress的实例
    
  • 常用方法

    getHostName():获取域名(没有域名时,显示的就是IP地址)
    getHostAddress():获取IP地址
    
import org.junit.Test;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class inetAddreassTest {
    @Test
    public void test1(){
        try {
            //获取指定ip对应的InetAddress的实例
            InetAddress add1 = InetAddress.getByName("192.168.35.48");
            InetAddress add11 = InetAddress.getByName("www.bilibili.com");
            System.out.println(add1);// /192.168.35.48
            System.out.println(add11);// www.bilibili.com/121.194.11.73

            //获取本地ip对应的InetAddress的实例
            InetAddress add2 = InetAddress.getLocalHost();
            System.out.println(add2);// LAPTOP-GQ3JJVBD/192.168.1.164

            //getHostName():获取域名
            System.out.println(add1.getHostName()); // 192.168.35.48
            //getHostAddress():获取IP地址
            System.out.println(add1.getHostAddress()); // 192.168.35.48
            
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

3. 传输层协议:TCP和UDP

  • TCP:传输控制协议
  • UDP:用户数据包协议

3.1 TCP协议与UDP协议

  • TCP:可靠的连接(发送数据前需要三次握手、结束时需要四次挥手),进行大数据量的传输,效率低

    • 打电话
  • UDP:不可靠的连接(发送前,不需要确认对方是否在)、使用数据报传输(限制在64kb以内)、效率高。

    • 发送短信、发电报、视频会议
  • 问题:客户端发送内容给服务器,服务器将内容打印到控制台上

    import org.junit.Test;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    //问题1:客户端发送内容给服务器,服务器将内容打印到控制台上
    public class TCPTest_01 {
    
        //客户端
        @Test
        public void client(){
            Socket socket = null;
            OutputStream os = null;
            try {
                // 1. 创建Socket
                InetAddress address = InetAddress.getByName("127.0.0.1");//服务器的地址
                int port = 8989;//服务器的端口号
                socket = new Socket(address,port);
    
                // 2. 发送信息
                os = socket.getOutputStream();
                os.write("我是客户端".getBytes());
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                // 3. 关闭Socket
                try {
                    if(os != null)
                        os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    if(socket != null)
                        socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
        //服务端
        @Test
        public void server() {
            ServerSocket serverSocket = null;
            Socket socket = null;//阻塞式方法
            InputStream is = null;
            try {
                // 1. 创建ServerSocket
                int port = 8989;
                serverSocket = new ServerSocket(port);
    
                // 2. 调用accept(),接受客户端Socket
                socket = serverSocket.accept();
                System.out.println("服务器端已开启");
    
                System.out.println("收到了来自"+ socket.getInetAddress() +"的连接");
    
                // 3. 接收数据
                is = socket.getInputStream();
                byte[] buffer = new byte[5];
                int len;
                ByteArrayOutputStream baos = new ByteArrayOutputStream();//内部维护一个byte[]数组
                while((len = is.read(buffer)) != -1){
                    // 可能会出现乱码
                    /*String str = new String(buffer,0,len);
                    System.out.print(str);*/
    
                    baos.write(buffer,0,len);
                }
    
                System.out.println(baos.toString());
    
                System.out.println("\n数据接收完毕");
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                // 4. 关闭Socket、SocketServer
                try {
                    if(socket != null)
                        socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    if(serverSocket != null)
                        serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    if(is != null)
                        is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

4. URL编程

  • Java后台:将写好的Java程序部署在Tomcat服务器。启动Tomcat服务器

  • 前台:使用浏览器进行访问。需要使用url。(HTML+CSS+JavaScript)

  • URL的作用:定位互联网上某一资源的地址

  • URL的格式:

    http://192.168.21.187∶8088 /eTamples/abcd.jpg?name=Tom--->"万事万物皆对象"
    应用层协议   ip地址      端口号     资源地址       参数列表
    

你可能感兴趣的:(JavaSE,java,网络,开发语言)