java_网络

kawyang      2022-04-03     709

关键词:



软件结构

C/S:客户端/服务器 结构
B/S:浏览器/服务器 结构

网络通信协议

同一网络中的计算机进行连接和通信时需要遵守一定的规则,即网络通信协议

ICP/IP

传输控制协议/因特网互联协议 -> IPv4,IPv6 (传输层)
  • 面向连接的通信协议:先建立链接
  • 三次握手
    • 客户端 -> 服务器:连接请求
    • 服务器 -> 客户端:回应
    • 客户端 -> 服务器:送达去人信息,确认连接
  • 保证数据的安全

客户端(Client)
服务器(Server)

步骤:

  • 服务器端先启动
  • 服务器不会主动请求客户端
  • 客户端请求服务器
  • 客户端和服务器建立连接
  • 包含一个IO对象
  • 通信数据不仅仅是字符
  • 所以IO 对象是 字节流

服务器:

  • 多个客户端和服务器进行交互,明确每个客户端
    • 在服务器:有accept方法,获取客户端获取请求客户端对象
  • 多个客户端和服务器进行交互,就需要使用多个IO对象
    • 服务器没有IO流,服务器可以获取客户端对象Socket
    • 使每个客户端Socket中提供的IO流和客户端进行交互
      • 服务器使用客户端的字节输入流读取客户端发送的数据 (借)
      • 服务器使用客户端的字节输出流给客户端写回数据
  • 服务器端:
    • Socket s1 = server.accept() //获取客户端对象 192.168.1.1
    • Socket s2 = server.accept() // 192.168.1.2

套接字

包含IP地址和 端口号的网络单位

客户端:

  • 构造方法:

    • Socket?(String host, int port)
  • 参数

    • String host: 服务器主机名/服务器IP地址
    • int port : 服务器端口号
  • 成员函数

    • public InputStream getInputStream()
      throws IOException
      • 返回此套接字的输入流
    • public OutputStream getOutputStream()
      throws IOException
      • 返回套接字的输出流
  • 步骤

    1. 创建一个客户端对象Socket ,绑定IP和端口号
    2. 使用Socket 对象中的方法 getOutputStream() 获取字节输出流对象
    3. 使用网络字节输出流对象的方法 write ,给服务器发送数据
    4. 使用Socket对象中的 getInputStream() 方法 获取输入流
    5. 使用输入流的 输入对象 read ,读取服务器写回的数据
    6. 释放Socket资源
  • 注意:

    1. 客户端和服务器端进行交互,必须使用Socket中提供的网络流,不能使用自己创建的流对象
    2. 当我们创建客户端对象时,会请求服务器,和服务器经过3次握手连接通路,如果服务器没有启动,抛出异常 ConnectException

服务器

ServerSocket :服务器套接字
读取客户端发送的数据,给客户端写回数据
表示服务器的类
    java.net.ServerSocket
  • 构造方法:
    • public ServerSocket?(int port)
      • throws IOException
    • public ServerSocket?() : 随机分配
      • 必须知道是呢个客户端请求的服务器
      • 所以可使用 accept 方法获取到请求对象 Socket
      • Listens for a connection to be made to this socket and accepts it. The method blocks until a connection is made.
  • 实现步骤
    1. 创建服务器 ServerSocket 对象
    2. 使用 accept方法,获取客户端的套接字 (Socket对象)
    3. 使用Socket对象中的方法 getInputStream() 获取输入流
    4. 使用输入流的 输入对象 read ,读取客户端发送的数据
    5. 使用Socket 对象中的方法 getOutputStream() 获取字节输出流对象
    6. 使用网络字节输出流对象的方法 write ,给客户端回写数据
    7. 释放资源(Socket ,ServerSocket)

综合案例: TCP 文件上传案例

  • 原理
    • 客户端读取本地文件,把文件上传服务器,服务器再把文件写入到服务器的硬盘上
  • 需求分析
    1. 客户端使用 本地字节输入流 ,读取要上传的文件
    2. 客户端使用 网络字节输出流 ,把读取到的文件上传到服务器
    3. 服务器使用 网络字节输入流 ,读取客户端上传的文件
    4. 服务器使用 本地字节输出流 ,把读取到的文件,保存到服务器硬盘上
    5. 服务器使用 本地字节输出流 ,给客户端我会写“上传成功”
    6. 客户端使用 网络字节输入流 ,读取服务器回写的数据
    7. 释放资源
  • 注意:
    • 本地读写使用本地流对象 (本地流)
    • 客户端和服务器之间进行读写,必须使用Socket中提供的字节流对象(网络流)

Read阻塞及解决方案

UDP

  • 用户数据报协议:无连接的通信协议
  • 耗资小,通信效率高
  • 音频、视频、普通数据
  • 容易丢失一两个数据包
  • 限制在64KB

网络编程三要素

  1. 协议
  2. IP地址
  3. 端口号:两个字节组成 0 - 65535之间
    • 1024 之前不能使用
    • 网络软件的端口号不能重复
  • 常用端口号
    • 80:网络端口号
    • 数据库:
      • mysql:3306
      • oracle:1521
      • Tomcat:8080

B/S (浏览器/服务器)

客户端是IE浏览器 ---> 服务器(Java程序) ---> 读取请求信息 ---> 服务器回写信息(网页文件) <文件地址 GET /bilibili/web/index.html HTTP/1.1 >

使用BufferedReader 中的ReaderLine 读取一行
new BufferedReader (new InputStreamReader(is))





java示例代码_用Java确定Internet网络接口

java示例代码_用Java确定Internet网络接口 查看详情

java示例代码_在Java中处理网络连接问题

java示例代码_在Java中处理网络连接问题 查看详情

java示例代码_找出网络连接在java中是否可用

java示例代码_找出网络连接在java中是否可用 查看详情

java示例代码_用Java监控我的网络连接

java示例代码_用Java监控我的网络连接 查看详情

java示例代码_-如果无线网络已经存在,如何连接到该网络

java示例代码_-如果无线网络已经存在,如何连接到该网络 查看详情

网络_套接字_java

1 由于(https://www.cnblogs.com/S-Mustard/p/11924227.html)讲到通过telnet访问百度首页,现在通过java代码来实现访问百度服务,获取首页信息。 try(Sockets=newSocket("www.baidu.com",80);Scannerin=newScanner(s.getInputStream(),"UTF-8") 查看详情

java示例代码_连接到Java中的网络摄像头

java示例代码_连接到Java中的网络摄像头 查看详情

java示例代码_在OnCreate中自动打开网络

java示例代码_在OnCreate中自动打开网络 查看详情

java示例代码_在网络视图上设置渐变背景

java示例代码_在网络视图上设置渐变背景 查看详情

java示例代码_如何识别网络应用程序(Java)的多个命令

java示例代码_如何识别网络应用程序(Java)的多个命令 查看详情

java示例代码_从网络摄像头拍摄单个快照

java示例代码_从网络摄像头拍摄单个快照 查看详情

java示例代码_用java获取本地网络上机器的MAC地址

java示例代码_用java获取本地网络上机器的MAC地址 查看详情

java示例代码_从java类路径中的网络目录正确加载资源

java示例代码_从java类路径中的网络目录正确加载资源 查看详情

java示例代码_FX2网络视图:如何增强滚动条

java示例代码_FX2网络视图:如何增强滚动条 查看详情

java示例代码_Android开发:如何通过https创建网络登录

java示例代码_Android开发:如何通过https创建网络登录 查看详情

java示例代码_如何阻止网络I/O的线程阻塞

java示例代码_如何阻止网络I/O的线程阻塞 查看详情

java示例代码_在JavaCV中更改网络摄像头格式

java示例代码_在JavaCV中更改网络摄像头格式 查看详情

java_网络

课程源:p394~p466软件结构网络通信协议ICP/IP综合案例:TCP文件上传案例UDP网络编程三要素B/S(浏览器/服务器)软件结构C/S:客户端/服务器结构B/S:浏览器/服务器结构网络通信协议同一网络中的计算机进行连接和通信时需要遵守一... 查看详情