JavaSE 第十九章 网络编程

      最后更新:2022-03-24 20:10:29 手机定位技术交流文章

      Java是一种互联网语言,为在线应用程序提供语言一级的支持,使程序员能够简单地创建传统的网络应用程序。

      Java提供在线图书馆。它很容易连接到互联网上。网络的内部运作 被埋在爪哇的主机安装系统里JVM负责Java开发了一个全平台网络图书馆。向程序员介绍了统一的网络编程环境。

      网络编程的目标是利用网络协议直接或间接地与其他计算机连接。

      在网络方案拟订方面,有两个主要问题需要考虑:

      如何准确在网络中找到一个或多个主机

      当发现主机时,数据传输的可靠性和效率如何?

      仅仅允许网络的主机通过了解对话双方的地址相互交谈是不够的;还必须遵循某些规则。

      OSI参考模型太完美,无法在因特网上广泛使用。

      TCP/IP参考模式(或TCP/IP协议):世界性事实上的标准。

      1. TCP/IP协议

      TCP/IP是根据其两项主要协定,即《传输控制议定书》和《网络连接议定书》发出的,尽管它实际上是一系列具有各种目的和相互联系的协定。

      从实际的角度来看,TCP/IP协议模式建立了一个有效的四层结构,即网络界面层、IP层、传输层和电器层,以下图像描述了TCP/IP的等级结构及其与OSI参考模式的相关性。

      传输层协定有两项关键协定:

      • TCP(《转让控制议定书》)是《转让控制议定书》的缩略语。

      • UDP表示用户数据表协议。

      TCP是传输控制协议,是一个以连接为导向的传输层协议。也就是说,在采用TCP议定书的申请程序(或程序)之前,首先,必须建立TCP连接。在传输完毕后,应当释放现有的连接。TCP协议被两个应用软件用于通信。第一个是服务器输入程序 。另一个是客户进程。

      UDP是无连接运输层的协议。也就是说,在使用联合民主党协议之前的申请程序(或程序)。不必先建 立连接。自然,当数据传输时,没有必要断开连接。因此,支出和数据转移所需的时间已经降低。互联网主机以两种方式显示地址:

      ww.un.org是域名。我不知道你在说什么,亲爱的。这篇文章是我们对2011年马拉维选举的特别报道的一部分。

      (动态 IP 地址) IP 地址

      1. 《Innet地址基础》

      InternetAddress 类对象拥有互联网主机地址的域名和 IP 地址: ww.netAddressI'm 不确定你在说什么, baby. com/ 。

      域名简单易记,当连接到网络时提供主机域名时,域名服务器(DNS)负责将域名转换为IP地址,以便连接到主机。

      获得主机的因特网地址:使用因特网地址类的静态方法:

      GetByName (String s): 此方法用于提供域名或 IP 地址的参数 。获得InnetAddress 对象,将域名和IP地址以及主机地址结合起来,目标所载资料以下列格式表示: www.baidu.com/180.97.33.108

      public static void main(String[] args) {
      try {
      InetAddress inter = InetAddress.getByName("www.baidu.com");
      String add = inter.getHostAddress();
      System.out.println(add);
      } catch (Exception e) {
      e.printStackTrace();
      }
      }

      该标识目前在PC上运行。 公认的港口:0-1023。 注册港口:1024-49151。

      TCP程序设计:

      最流行的网络应用模型是客户-服务器模型。当我们上网时,我们使用的浏览器(例如 IE)是客户软件,网页主机的网址必须有一个 WEB 服务器。

      一般而言,客户拥有当前的通信应用程序。 另一方面,服务器在等待通信请求,当服务器收到客户的请求时,它进行必要的计算,并将结果交付客户。

      IP 地址 ID 计算机已连接到互联网上, Port ID 正在计算机上执行(程序)。

      将端口号与 IP 地址合并, 创建一个网络集 。

      端口号为16位整数,从0到65535不等。其中,1023专用于服务通信(例如23港(Telnet))。http 可以进入80号港口等等。除非我们需要获得这些具体服务,否则,为了与其中一个港口连接,应当利用其中一个港口。以免发生端口冲突。

      Socket 接口长期以来一直被用于创建在线应用程序,达到事实上的标准。 Sockets实施七项基本操作:

      • 连接到远程主机

      • 绑定到端口

      • 从遥远的计算机获取连接请求

      • 监听到达的数据

      • 发送数据

      • 接收数据

      • 关闭连接

      1. Socket简介

      两个 Java 程序可以通过双向网络通信连接交换数据, 其中一部分被称为 Socket 。 Sockets 常常用来建立客户/ 服务器关系 。

      Java语言以综合程序为基础,分为服务器和客户程序,其通信机制在图中说明:

      简单的例子 : 服务器和客户端之间有互动流。 请记住输入流和输出流是两种不同的东西 。

      案件的结果是客户与服务器交谈,如果客户打招呼,服务器回应世界。普通文本应传输。

      public class ClientTest {
      public static void main(String[] args) {
      我不知道你在说什么 System 我不知道你在说什么 出局 Println ("客户启动");
      try {
      Socket socket = new Socket("localhost",8888);
      OutputStream outputStream = socket.getOutputStream();
      请接受我的道歉,输出流。 哦,我的上帝。哦,我的上帝。哦,我的上帝。哦,我的上帝。
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      }

      public class ServerTest {
      public static void main(String[] args) {
      try {
      我不知道你在说什么,System. 我不知道你在说什么,出去。 客户已经开始了;
      ServerSocket serverSocket = new ServerSocket(8888);
      Socket socket = serverSocket.accept();
      InputStream is = socket.getInputStream();
      byte[]bs = new byte[1024];
      is.read(bs);
      String s = new String(bs);
      我不知道你在说什么,System. 我不知道你在说什么, 出去。"Message收到:"+s.Trim ();
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      }

      public class Test1_Server {
      public static void main(String[] args) throws IOException {
      我不知道你在说什么 System 我不知道你在说什么 出去" 服务是可用的" ("服务是可用的");
      ServerSocket server = new ServerSocket(12456);
      Socket socket = server.accept();
      InputStream inStream = socket.getInputStream();
      int i = -1;
      byte[] bs = new byte[1024];
      inStream.read(bs);
      String s = new String(bs);
      OutputStream os = null;
      System.out.println(s);
      if(null!=s&&s.trim().equals("hello")) {
      os = socket.getOutputStream();
      os.write("world".getBytes());
      }
      inStream.close();
      if(null!=os) {
      os.close();
      }
      socket.close();
      server.close();
      }
      }

      public class Test1_Client {
      public static void main(String[] args) {
      Scanner input = new Scanner(System.in);
      我不知道你在说什么 System. 我不知道你在说什么 出去 Printl ("请输入将要转移的材料");
      String words = input.next();
      try {
      Socket socket = new Socket("localhost", 12456);
      OutputStream os = socket.getOutputStream();
      os.write(words.getBytes());
      InputStream inStream = socket.getInputStream();
      byte[] bs=new byte[1024];
      inStream.read(bs);
      String s = new String(bs);
      System.out.println(s.trim());
      os.close();
      inStream.close();
      socket.close();
      } catch (Exception e) {
      e.printStackTrace();
      }
      }
      }

      传输普通的图片

      public class ClientTest01 {
      public static void main(String[] args) {
      try {
      Socket socket = new Socket("localhost",8888);
      OutputStream out = socket.getOutputStream();
      FileInputStream inputStream = new FileInputStream("D:/info4.png");
      int i;
      while((i=inputStream.read())!=-1){
      out.write(i);
      }
      out.close();
      inputStream.close();
      socket.close();
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      }
      class ServerTest01{
      public static void main(String[] args) {
      try {
      ServerSocket serverSocket = new ServerSocket(8888);
      Socket socket = serverSocket.accept();
      InputStream inputStream = socket.getInputStream();
      FileOutputStream out = new FileOutputStream("bak.png");
      int i ;
      while((i=inputStream.read())!=-1){
      out.write(i);
      }
      out.close();
      inputStream.close();
      socket.close();
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      }

      package com.openlab.net;
      import com.openlab.test.OtherClass;
      import java.io.*;
      import java.net.ServerSocket;
      import java.net.Socket;
      public class ClientTest01 {
      / 客户端将图像传送到服务器,并从服务器接收信息。
      public static void main(String[] args) {
      try {
      Socket socket = new Socket("localhost",8888);
      OutputStream out = socket.getOutputStream();//output
      FileInputStream inputStream = new FileInputStream("D:/info4.png");
      int i;
      while((i=inputStream.read())!=-1){
      out.write(i);
      }
      抱歉, socket. shutdownoutput (;) // output
      InputStream inputStream1 = socket.getInputStream();
      byte[] bs = new byte[1024];
      inputStream1.read(bs) ;
      String s = new String(bs);
      对不起,但我不知道你在说什么 我不知道你在说什么 但我不知道你在说什么 但我不知道你在说什么 但我不知道你在说什么
      out.close();
      inputStream.close();
      socket.close();
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      }
      class ServerTest01{
      public static void main(String[] args) {
      try {
      ServerSocket serverSocket = new ServerSocket(8888);
      Socket socket = serverSocket.accept();
      InputStream inputStream = socket.getInputStream();
      FileOutputStream out = new FileOutputStream("bak.png");
      int i ;
      while((i=inputStream.read())!=-1){
      out.write(i);
      }
      OutputStream outputStream = socket.getOutputStream();
      我道歉,输出流。 我有一个信息给你, 写。 Get Bytes () ;
      outputStream.close();
      inputStream.close();
      socket.close();
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      }

      UDP:

      和TCP编程相比,联合发展方案的拟订容易得多。联合民主党协议没有建立连接。也发送了数据包,并同时发送了所有数据包。因此,不存在概念流动。联合发展方案的方案编制在爪哇就是一个例子。仍然需要使用套接字。因为当使用UDP时,程序必须提及网络连接(IP)和端口号。Nota bene:UDP和TCP港口均使用0-65535,UDP港口也以同样方式使用。然而,它们是两个不同的港口。TCP被一项申请用于占用1234号港口。它对使用UDP的另一个程序使用1234港口没有影响。在服务器端,使用 UDP 时也需要听从给定端口。为了开展这项行动,爪哇提供了数据套。联合DP数据报告使用数据组数据集发送和接收。该系统不能确保UDP数据报告能够顺利到达目的地。我不知道什么时候能到那里本文是我们对UDP数据报告的特殊覆盖的一部分,可在http://t.co/DatagramPacket.com/DatagramPacket 对象上查阅。其中包括发件人的IP地址和端口号以及IP地址和收件人的端口号。

      class Send{
      public static void main(String[] args) {
      try {
      DatagramSocket datagramSocket = new DatagramSocket();
      "我的UDP信息" 字符串s;
      byte[] bs = s.getBytes();
      InetAddress inetAddress = InetAddress.getLocalHost();
      DatagramPacket packet = new DatagramPacket(bs,0,bs.length,inetAddress,8888);
      datagramSocket.send(packet);
      datagramSocket.close();
      } catch (Exception e) {
      e.printStackTrace();
      }
      }
      }
      class Receive{
      public static void main(String[] args) {
      try {
      DatagramSocket datagramSocket = new DatagramSocket(8888);
      byte[] bs = new byte[1024];
      DatagramPacket packet = new DatagramPacket(bs,0,bs.length);
      datagramSocket.receive(packet);
      System.out.println(new String(packet.getData(),0,packet.getLength()));
      } catch (Exception e) {
      e.printStackTrace();
      }
      }
      }

      URL (统一资源定位器) 程序: URL (统一资源定位器) 统一资源定位器,它指定了资源的互联网地址。这是一个独特的 URL,可用 URL 识别资源 。它还显示资源所在的位置。

      public static void main(String[] args) {
      HttpURLConnection urlConnection = null;
      InputStream inputStream = null;
      FileOutputStream out = null;
      try {
      URL url = new URL("http://localhost:8080/jspdemo01_war_exploded/test.bmp");
      urlConnection = (HttpURLConnection) url.openConnection();
      urlConnection.connect();
      inputStream = urlConnection.getInputStream();
      int i ;
      out = new FileOutputStream("bak1.png");
      while((i=inputStream.read())!=-1){
      out.write(i);
      }
      out.close();
      inputStream.close();
      } catch (Exception e) {
      e.printStackTrace();
      }
      }

      HTTP:

      什么是HTTP?HTTP是目前用于大多数在线申请的基础协议。例如,浏览器访问网站,手持设备应用程序连接到后台服务器 。这是利用HTTP协议完成的。超文本传输协议(HTTP)是超文本传输协议的缩写。这篇文章是全球之声在线特稿的一部分。它以TCP协议的请求-答复协议为基础。

      让我们来看看 HTTP 寻求浏览器发送您申请访问网站时 。当浏览器试图查看网站时, 它无法这样做 。要开始, 在浏览器和网络服务器之间建立 TCP 连接 。此外,服务器总是使用80个端口和443个加密端口。然后,浏览器向服务器发送 HTTP 请求 。服务器收到后,a 返回 HTTP 回复HTML 页面包含在答案中 。这样,浏览器分析 HTML 以便向用户显示网页 。以下是对HTTP完整请求的答复。

      HTTP 请求格式得到更正。它由两部分组成:HTTP信头和HTTP机构。第一行总是要求使用方法路径的 HTTP 版本 。例如,Get/HTTP/1. 这个项目是全球之声在线特别报导的一部分。路径是 / ,HTTP/1.1是版本。

      以下各行都是固定页眉:价值格式,我们称之为 HTTP 页眉,服务器依赖某些页眉,例如:

      由于服务器上可能有几个站点,因此依赖主机确定请求至关重要。

      用户代理 : 提供客户独特的识别信息; 各种浏览器都有独特的身份, 服务器依靠用户代理来确定客户的终端类型 。

      接受:指定客户可能处理的 HTTP 响应格式,其中/表示任何格式,文本/*表示任何文本,图像/png表示PNG格式的图像。

      接受语言:反映客户收到的语言;将各种语言列为优先事项,服务器依靠这些数据向用户提供语言网页版本。

      如果请求是"得到"因此,HTTP的唯一请求是HTTP信头。没有 HTTP 身体 。如果请求是POST,然后将HTTP的要求与 " 身体 " 一起执行。以一个空行分隔。以下是典型的HTTP与身体请求的典型例子。

      POST /login HTTP/1.1
      Host: www.example.com
      Content-Type: application/x-www-form-urlencoded
      Content-Length: 30
      username=hello&password=123456

      POST请求通常必须包括身体类型的内容类型和身体长度的中枢语言,以便服务器能够对信头和身体的请求作出适当答复。

      此外,GET 请求参数必须附加到 URL 中 。并且它用一个通用编码格式编码。例如: http://www.example.co m/?a=1&b=K%26R ,参数分别是 a=1 和 b=K&R 。由于 URL 的长度限制,在Get请求中不可能有太多的参数。POST所要求的参数长度不受限制。因为POST参数必须包含在体内。并且,对 POST 请求的引用并不总是一个 URL 代码 。它可以按照你喜欢的格式编程你要做的就是把它放在中小类的位置上邮电处向JSON提出的最常见的查询如下:

      POST /login HTTP/1.1
      Content-Type: application/json
      Content-Length: 38
      {"username":"bob","password":"123456"}

      HTTP的回复也包含页眉和身体部分, 典型的HTTP的回复是这样的:

      HTTP/1.1 200 OK
      Content-Type: text/html
      Content-Length: 133251
      <!DOCTYPE html>
      <html><body>
      <h1>Hello</h1>

      回复代码的 HTTP 版本始终是回复的第一行。例如,HTTP/ 1. 1, 1, 2 2 OK 表示 HTTP/ 1. 一种版本 。200是回声代码。回答可以接受。客户只看响应代码以确定 HTTP 响应是否成功。

      HTTP有一个标准的响应代码 :

      1xx:表示可能的答复,例如101表示将修改议定书,通常改到WebSocket。

      2xx:积极响应,例如,成功率为200,而部分分配率为206。

      3xx:表示重新校准的答复,如301表示永久重新瞄准目标,而303表示客户应使用所提供的路线重新提出请求。

      4xx: 表示由于客户问题,答复不正确,例如,由于诸如内容-类型等各种原因提出不正确要求400次,在供应路线不存在时提出404次要求404次;

      5xx: 指定因服务器问题造成的错误响应, 如代码500 表示服务器存在内部问题, 而代码503 表示服务器暂时不响应 。

      浏览器收到 HTTP 最初回复后,它解析HTML后,将按顺序发出HTTP请求。例如,Get/logo.jpg HTTP/1. 这是对图像的单一请求 。这个故事是我们对2011年埃及抗议的特别报导的一部分。二进制内容图像直接传送到浏览器 :

      HTTP/1.1 200 OK
      Content-Type: image/jpeg
      Content-Length: 18391
      ????JFIFHH??XExifMM?i&??X?...(二进制的JPEG图片)

      因此,服务器总是被动地接受客户的HTTP请求,然后作出答复,客户根据需要提交若干HTTP请求。

      这是一个协议,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易,一个交易当您发送 HTTP 请求时,客户必须首先建立新的TCP连接。然后,这个故事是我们对2011年埃及抗议的特别报导的一部分。这种TCP连接应终止。连接TCP需要很长时间,因为它需要时间。因此,为了提高效率,关于TCP联系,HTTP/1.《第一议定书》允许重复发送答复。这是一个很大的生产力。

      由于HTTP协议是请求-回复协议,客户必须等待服务器对 HTTP 请求作出答复,然后才能发出下一份请求,因此,如果回复过迟,回请求将被冻结。

      因此,为了加快速度,HTTP/2.0允许客户在没有收到回复时提交多次 HTTP 请求,而服务器在收到回复时不必按顺序做出回复,只要双方能够确定哪一方请求要回复,并同时发送和接收:

      另见HTTP/2.U.S.A.也提高了效率

      HTTP编程

      由于与TCP一样,HTTP涉及客户和服务器客户,因此我们还需要客户专用和服务器专用代码。

      这一部分不包括服务器方面的HTTP程序,因为服务器上的HTTP程序主要涉及网络服务器的设计,这是一个非常复杂的系统,是JavaEE开发的核心,并将在今后各节中涵盖。

      本节仅侧重于作为客户的HTTP编程。

      因为浏览器也是 HTTP 客户端,所以,HTTP 客户方案规划,它的运作方式与浏览器相同。即提出HTTP请求,接收服务器响应后,获得响应内容。只是浏览器解释回复的内容 并向用户显示我们只用爪哇来获取材料 HTTP 客户代码 。

      让我们检查 Java 是否支持 HTTP 客户程序。 Java 标准图书馆包含基于 HTTP 的软件包, 但是要记住, 先前的 JDK 版本是通过 HttpurLConnection 访问的 。

      HTTP标准代码如下:

      public static void main(String[] args) {
      HttpURLConnection urlConnection = null;
      InputStream inputStream = null;
      FileOutputStream out = null;
      try {
      URL url = new URL("http://localhost:8080/jspdemo01_war_exploded/test.bmp");
      urlConnection = (HttpURLConnection) url.openConnection();
      urlConnection.connect();
      inputStream = urlConnection.getInputStream();
      int i ;
      out = new FileOutputStream("bak1.png");
      while((i=inputStream.read())!=-1){
      out.write(i);
      }
      out.close();
      inputStream.close();
      } catch (Exception e) {
      e.printStackTrace();
      }
      }

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/20805.html

          热门文章

          文章分类