cs 客户端 服务器

例: QQ 端游 迅雷 百度网盘
优点

  1. 画面精美
  2. 可以在客户端电脑上进行一些计算保存一些数据 从而减轻服务器的压力

bs 浏览器 服务器

例:电商网站 淘宝 京东 页游
优点:

  1. 不需要下载 不占用硬盘空间
  2. 开发周期短 任何操作系统 都会有浏览器 只需要开发服务端即可
  3. 可以无缝更新

网络编程

  1. 就是在一定的协议下,实现两台计算机的通信的程序

三要素

  • 协议

    • 两台计算机通信必须要遵循一定的规则 有点像 马路上的扯需要遵守交通规则
    • UPD协议
      • 面向无连接的通信协议 两台计算机进行交互 不需要建立连接 发送端给接收发送数据 直接发送 不考虑 接收端是否存在 接收端即使接收到数据 也不会反馈给发送端
      • UDP协议由于不需要建立连接 消耗资源少 发送效率高 但是每次发送的数据不能超过64kb 不能保证数据的完整性
    • TCP协议

      • 面向连接的通信协议 两台计算机进行交互 必须建立连接 可以保证数据的可靠的 无差错的传输
      • 三次握手协议

             客户端---->服务端<br />                 服务端<----客户端<br />                 客户端---->服务端
        
      • TCP协议需要建立连接 消耗资源多 发送效率没那么高 发送数据没有限制 可以保证数据的完整性

                 上传和下载必须使用TCP协议
        
  • ip

    • 计算机进入到网络中,需要唯一的标识,在TCP/IP协议中,这个唯一标识就是IP地址
    • ipv4:4个字节的2进制数表示 为了方便 通常表示为192.168.1.1这种格式
    • ipv6:采用128位地址长度,每16个字节一组,分成8组十六进制数 解决资源不够的问题

      • 常用命令

        • 查看IP地址

                      ipconfig
          
        • 检查网络是否连通

                      ping ip地址<br />                           ping 网址
          
        • 特殊的ip地址

                        127.0.0.1<br />                             localhost<br />                            都代表当前计算机的ip
          
  • 端口号

    • 进程的唯一标识
    • 范围 0-65535 前1024已经被占用
    • 计算机通过ip地址 确认接收端的地址 通过端口号 确认要接收的进程

发送端

  • java.net.DatagramSocket
    • 构造方法
      • public DatagramSocket()
    • 方法
      • void send(DatagramPacket p)从此套接字发送数据报包
  • 发送端数据包
    • java.net.DatagramPacket
      • 构造方法
        • public DatagramPacket(byte[]bytes,int length,InetAddress ip,int port) 创建发送数据包对象

接收端

  • java.net.DatagramSocket
    • 构造方法
      • public DatagramSocket(int port)创建接收端对象 绑定端口号
    • 方法
      • void receive(DatagramPacket p)接收数据包的方法
  • UDP接收端的数据包

    • java.net.DatagramPacket
      • 构造方法
        • public DatagramPacket(byte[]buf,int length)构造 DatagramPacket 用来接收长度为length的数据包
      • 方法
        • int getLength()
        • int getPort()
        • InetAddress getAddress()

          java.net.InetAddress

  • 静态方法创建对象

    • static InetAddress getLocalHost() 返回本地主机的ip地址对象
    • static InetAddress getByName(String host)根据主机名 获取ip地址对象 可以写主机名 String的ip网址
  • 方法
    • String getHostName()获取主机名
    • String getHostAddress()获取ip地址

UDP发送端

  • java.net.DatagramSocket
    • 构造方法
      • public DatagramSocket()
    • 方法
      • void send(DatagramPacket p)从此套接字发送数据报包
  • 发送端数据包

    • java.net.DatagramPacket

      • 构造方法

        • public DatagramPacket(byte[] bytes,int length,InetAddress ip,int port)

                            创建数据包对象
          
  1. 创建发送端对象 DatagramSocket
  2. 创建数据包对象 DatagramPacket 封装数据 接收端ip 接收端端口
  3. 调用发送端对象的send方法 发送数据包
  4. 关闭资源

UDP的接收端

  • java.net.DatagramSocket
    • 构造方法
      • public DatagramSocket(int port)创建接收端对象 绑定端口号
    • 方法
      • void receive(DatagramPacket p)接收数据包的方法
  • UDP接收端的数据包
    • java.net.DatagramPacket
      • 构造方法
        • public DatagramPacket(byte[]buf,int length)构造 DatagramPacket,用来接收长度为length的数据包
      • 方法
        • int getLength()获取发送端发送数据长度
        • int getPort()发送端端口
        • InetAddress getAddress()发送端ip
  1. 创建接收端对象 绑定端口号
  2. 创建数据包对象
  3. 调用接收端对象的receive方法接收数据包
  4. 拆包
  5. 关闭资源

TCP客户端

  • java.net.Socket
    • 构造方法
      • Socket(InetAddress address,int port)
      • Socket(String host,int port)创建客户端对象 绑定服务器ip和端口
    • 方法
      • OutputStream getOutputStream()获取当前客户端字节输出流
      • InputStream getInputStream()获取当前客户端对象的字节输入流
  1. 创建客户对象 绑定服务器ip和端口
  2. 获取字节输出流对象
  3. 向服务器写数据”你好”
  4. 获取字节输入流对象
  5. 接收服务器返回的数据”滚”
  6. 关闭资源

TCP服务器

  • java.net.ServerSocket
    • 构造方法
      • public ServerSocket(int port)创建服务器对象 指定端口 要和客户端对应
    • 方法
      • Socket accept()获取正在连接服务器的 客户端对象
  1. 创建服务器端对象 指定端口号
  2. 调用accept方法 获取正在连接的客户端对象
  3. 通过客户端对象 获取字节输入流
  4. 接收当前发送的数据”你好”
  5. 通过客户端对象 获取字节输出流
  6. 向当前客户端返回数据”滚”
  7. 关闭资源