最后更新:2022-07-29 23:59:14 手机定位技术交流文章
目录
Java网络编程的基本知识
1.网络分类
2.网络编程模型
3.网络协议
4.套接字和端口
二、Java TCP通信:Java ServerSocket类和Socket类
1.ServerSocket类
2.索克类
3.客户与服务器之间的简单沟通
4.传输对象数据
三、Java 什么是URL?及URL类和URLConnection类
1.URL 概念
2.URL 类
总结
网络编程的目的是通过网络协议直接或间接地与其他计算机进行通信。
该语言包含了各种网络编程所需的类,程序员只需要创建这些类的对象,调用相应的方法,并编写网络应用程序。
要进行网络程序的编写,编程人员需要对网络传输协议、端口和套接字等方面的知识有一定的了解。下面就从这几个方面对网络编程的基础进行介绍。
在学习网络编程之前,先让读者了解一些有关计算机网络的简单信息。 计算机网络是通过通信设备线连接多个具有独立功能的计算机的整个系统,并在网络软件的支持下实现资源共享和数据通信。
根据地理范围,网络分为本地网络、城市网络、宽带网络和互联网网络。
在网络通信中主要有两种模式的通信方式:一种是客户机/服务器(Client/Server)模式,简称为 C/S 模式;另一种是浏览器/服务器(Browser/Server)模式,简称 B/S 模式。 下面主要介绍这两个模式。
Client/Server 模式
图1显示了客户端、服务器和网络之间的关系,许多程序使用这个模型,例如许多读者喜欢玩在线游戏,需要客户端安装在机器上,服务器运行在游戏开发公司的车间。
图1 C/S模型
使用
C/S
模型程序需要在开发过程中分别为客户端和服务器端开发。
开发模式的优点是,由于客户是特别开发的,所以性能更强。 缺点是通用性
换句话说,一个程序的客户端只能与相应的服务器通信,不能与其他服务器通信。在实际维护中,也需要维护专门的客户端和服务器,维护压力更大。
Browser/Server 模式
对于许多程序来说,不需要运行专门的客户端,而是使用一个普通的客户端,例如浏览器。 使用浏览器作为客户端的这种模式叫做 浏览器/服务器模式 使用该模型开发程序时,你只需要开发服务器侧面,开发压力较小,不需要维护客户端。 不过,浏览器的局限性比较大,性能并不强。
网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义。目前的网络协议有很多种,在这里简单介绍几种常用的网络协议。
IP 协议
IP
是英文 Internet Protocol(网络之间互联的协议)的缩写,中文简称为
网协
,也就是为计算机网络相互连接进行通信而设计的协议。在互联网中,它是一套允许所有与互联网连接的计算机网络互相通信的规则。规定了计算机在 Internet 上进行通信时应当遵守的规则。任何由任何制造商制造的计算机系统只能通过遵守IP协议连接到互联网。
Internet
网络中采用的协议是
TCP/IP
协议
,
其全称是
Transmission Control Protocol/Internet Protocol
。Internet 依靠 TCP/IP 协议在全球范围内实现不同硬件结构、不同操作系统、不同网络的互联。
对网络编程来说,主要是计算机和计算机之间的通信,首要的问题就是如何找到网络上数以亿计的计算机。为了解决这个问题,网络中的每个设备都会有唯一的数字标识,也就是 IP 地址。
在计算机网络中,现在命名 IP 地址的规定是 IPv4 协议,该协议规定每个 IP 地址由 4 个 0~255 的数字组成。
每台接入网络的计算机都拥有一个唯一的 IP 地址,这个地址可能是固定的,也可能是动态的。
目前 IETF(Internet Engineering Task Force,互联网工程任务组)设计的用于替代现行版本 IP 协议(IPv4)的下一代协议 IPv6,IP地址由6个字符表示,但它还没有开始使用。
TCP/IP
定义了电子设备如何连入 Internet 以及数据如何在它们之间传输的标准。
该协议使用四个层结构,分别是应用层、传输层、网络层和网络接口层。
每个层调用其下层提供的网络来满足其需要。
TCP
负责发现传输的问题,一有问题就发出信号要求重新传输,直到所有数据安全正确地传输到目的地,而 IP 是给 Internet 的每一台电脑规定一个地址。图 2 是 TCP/IP 层次结构图。
图2TCP/IP层次结构
TCP 与 UDP 协议
虽然TCP/IP协议从名称的角度只包括TCP名称,
TCP/IP
协议的传输层同时存在 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)两个协议。
在网络通信中,TCP协议类似于手机电话,确保信息 passed on to others;而UDP协议类似于文本消息,接收者可能不能接收传递的信息。
TCP在网络通信中的应用需要建立专门的虚拟连接,然后建立可靠的数据连接,如果数据发送失败,客户端将自动检索数据.使用UDP不需要创建专门的虚拟连接,传输也不是很可靠,如果发送失败, 则无法访问客户端.
TCP
该协议是一个固定线协议,提供两个计算机之间可靠的数据传输。UDP没有连接通信协议,不能保证可靠的数据传输,但可以向多个目标发送数据,并从多个来源接收数据。
对于一些重要的数据,一般使用 TCP 方式来进行数据传输,而大量的非核心数据则通过 UDP 方式进行传递。使用 TCP 方式传递的速度稍微慢一点,而且传输时产生的数据量会比 UDP 大一点。
在网络上很多应用程序都是采用客户端/服务器(C/S)的模式,实现网络通信必须将两台计算机连接起来建立一个双向的通信链路,这个双向通信链路的每一端称之为一个
索克
。
一个服务器可以提供多个服务,使用一个IP地址,该地址只能位于一个计算机上,但不能准确地连接到您想要连接的服务器。 通常,从0到65535的整数用于识别机器上的服务,即
端口号(Port)
.端口号不指计算机上的物理位置,而是软件的抽象。
港口号码主要分为两个类别:
运行在一台特定机器上的某个服务器(如 FTP 服务器)都有一个套接字绑定在该服务器上,服务器只是等待和监听客户的连接请求。客户端客户需要知道服务器的主机名和端口号。
为了建立连接请求,客户端尝试连接到服务器上的端口号码指定的服务,如图3所示。
图3客户端向服务器发送请求
如果服务器收到客户端的请求,它创建一个接口,该接口用于与服务器进行通信,但此时,客户端的接口与与服务器连接的端口号码不相关。
TCP 网络程序是指利用 Socket 编写的通信程序。利用 TCP 协议进行通信的两个应用程序是有主次之分的,一个是服务器程序,一个是客户端程序,两者的功能和编写方法不太一样。其中 ServerSocket 类表示 Socket 服务器端,Socket 类表示 Socket 客户端 两者之间的相互作用过程如下:
ServerSocket
该类与 Socket 类相符,它用于指示通信的双方服务器端口,打开服务器上的端口,被动等待数据(使用 Accept() 方法)和创建与数据交互的连接。
服务器套接字一旦能连接到一个插座,如果多个客户端同时请求连接,服务器插座将存储请求的连接客户端在队列中,然后从它中提取一个接口,并将其连接到服务器的新接口。如果请求的连接大于最大容量,如果多个连接请求被拒绝, 默认队列大小为50.
下面简要介绍了ServerSocket的建模方法和通用方法.
ServerSocket 的构造方法
ServerSocket 下文给出了施工方法.
在上述方法的参数中 port 指的是本地 TCP 端口,backlog 指的是监听 backlog,bindAddr 指的是要将服务器绑定到的 InetAddress。
创建 ServerSocket 时可能会拋出 IOException 异常,所以要进行异常捕捉。如下所示为使用 8111 端口的 ServerSocket 实例代码。
ServerSocket 的常用方法
ServerSocket 下面是常见的方法。
调用 accept() 方法会返回一个和客户端 Socket 对象相连接的 Socket 对象,
服务器端的 Socket 对象使用 getOutputStream() 方法获得的输出流将指定客户端 Socket 对象使用 getInputStream() 方法获得那个输入流。同样,服务器端的 Socket 对象使用的 getInputStream() 方法获得的输入流将指向客户端 Socket 对象使用的 getOutputStream() 方法获得的那个输出流。
也就是说,当服务器将信息写入输出流时,客户端可以通过相应的输入流读取信息,反之亦然。
例 1
了解上面的基础知识后,下面使用 ServerSocket 类在本机上创建一个使用端口 8888 的服务器端套接字,实例代码如下所示。
如上述代码所示,在成功建立 8888 端口的服务器端套接字之后,如果没有客户端的连接请求,则 accept() 方法为空,所以不会输出“成功建立与客户端的连接”,运行结果如下所示。
Socket 类指通信双方的客户端,它使用远程机上的终端调用并发送数据到服务器(在连接建立后也接收数据)。 以下为索克类的结构方法和一般方法的简要介绍.
Socket 的构造方法
Socket 下文给出了施工方法.
在上述方法的参数中,address 指的是远程地址,port 指的是远程端口,localAddr 指的是要将套接字绑定到的本地地址,localPort 指的是要将套接字绑定到的本地端口。
Socket 的常用方法
Socket 下面是常见的方法。
例 2
编译一个包括客户端和服务器的TCP程序。 要求服务器等待接收客户端发送的内容,然后输出接收的内容到控制台并作出反馈。
(1)
创建一个类作为客户端,首先在主() 方法中定义一个 Socket 对象、一个 OutputStream 对象和一个 InputStream 对象,并完成初始化。然后定义服务器端的IP地址和端口号码,代码如下所示。
(2) 创建连接到服务器并发送数据到服务器。代码如下。
(3) 从输入流中读取服务器的反馈信息,并将其输出到控制台。
(4) 关闭输入/输出流和索克对象,如下面的代码所示。
(5) 创建一个类作为服务器的末端,写主()方法,创建ServerSocket, Socket, InputStream, OutputStream,和端口数,并启动,如下面的代码所示。
(6) 打开服务器并接收由客户端发送的数据。代码如下。
(7) 使用输出流对象来反馈给客户端的信息, 下文显示代码.
(8) 关闭输入/输出流、Socket 对象以及 ServerSocket 对象,代码如下所示。
(9) 运行服务器端程序代码,结果如下。
(10) 为了使程序的结果更加清晰,在步骤 (2) 的代码最后加入一句代码“Thread.sleep(1000);”。接着运行客户端程序代码,刚开始会出现如下所示的运行结果。
以下结果将立即出现。
在了解 TCP 通信中 ServerSocket 类和 Socket 类的简单应用之后,本节将编写一个案例实现客户端向服务器发送信息,服务器读取客户端发送的信息,并将读取的数据写入到数据流中。
首先查看客户端的代码,如下面所示:
如上述代码所示,客户端代码主要是使用 Socket 连接 IP 为 127.0.0.1(本机)的 5000 端口。在连接建立后,随机生成的数字将通过PrintWriter类输出到插座上。休眠 2 秒后,再次发送随机数,如此循环。
再次,请看下面所示的服务器端代码:
如上述代码所示,服务器端与客户端代码相似,首先使用 ServerSocket 在 IP为127.0.0.1(本机)的 5000 端口建立套接字监听。在 accept() 方法接收到客户端的 Socket 实例之后调用 BufferedReader 类的 readLine() 方法,从一个接口中读取一行作为数据,然后输出它控制和睡眠2秒。
要运行本案例,必须先执行服务器端程序,然后执行客户端程序。客户端每隔 2 秒向服务器发送一个数字,如下所示。
服务器端输出由客户端发送到控制面板的数据,如下面所示。
研究了如何在服务器上启动终端监控接口,以及如何连接到客户端的服务器并发送简单的数字。 这个案例将实现如何向客户端的服务器端发送对象,以及服务器如何分析对象的数据。
例 3
第一步是创建存储数据的类。这里使用的用户类是普通类,包含 name 和 password 两个成员。由于需要序列对象,以便通过网络传输,所以我们需要实现Java。I.Serializable to P。
User
类的代码如下:
接下来编写服务器端的代码。服务器的作用是接收客户端发送过来的数据,将数据转换成 User 对象并输出成员信息,然后对 User 对象进行修改再输出给客户端。
服务器端MyServer类的实现代码如下:
如上述代码所示,在服务器端分别使用 ObjectInputStream 和 ObjectOutputStream 来接收和发送 socket 中的 InputStream 和OutputStream,然后将其转换为用户对象。
客户端需要连接到服务器,接收服务器的输出数据并对其进行分析,创建用户对象并发送到服务器。 客户端MyClient类的实现代码如下:
更仔细地查看上述代码显示,客户端的代码与服务器的代码相似,并且它也使用ObjectOutputStream和ObjectInputStream来处理数据。
先运行服务器端程序 MyServer,再运行客户端程序 MyClient。此时将在客户端看到下所示的输出。
下面显示服务器端的输出。
在Java 的 API 中的 java.net 包中包含一个 URL 类和一个 URLConnection 类。下面介绍这两个类的相关知识。
URL
是统一资源定位符(Uniform Resource Locator)的简称,它表示 Internet 上某一资源的地址。
通过URL,用户可以访问各种网络资源,如一般的WW和FTP网站。
浏览器可以通过分析指定的URL来搜索网络上的相应的文件或其它资源。
URL
下面是语法格式。
协议名(protocol)指明获取资源所使用的传输协议 ,例如HTTP、FTP和文件, 资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。 这里有一些简单的URL例子。
在 java.net 包中包含专门用来处理 URL 的类 URL,可以获得 URL 的相关信息,例如 URL 的协议名和主机名等。下面分别对它的构造方法和常用方法进行介绍。
URL
施工方法见表1。
| 构造方法 | 说明 |
|---|---|
| public URL (String spec) | 一个URL对象可以通过一个指示URL地址的字符串来构造。 |
| public URL(URL context,String spec) | 使用基本地址和相对URL构造一个URL对象。 |
| public URL(String protocol,String host,String file) | 使用指定的协议、主机名和文件名创建一个URL对象。 |
| public URL(String protocol,String host,int port,String file) | 创建一个URL对象,使用指定的协议、主机名称、端口号和文件名。 |
URL 表 2 显示 了 共同 的 方法 。
| 方法 | 说明 |
|---|---|
| public String getProtocol() | 获取URL的协议名称。 |
| public String getHost() | 获取URL的主机名称。 |
| public int getPort() | 获取URL的端口号码, 如果端口没有设置,则返回 -1 。 |
| public String getFile() | 获取URL的文件名。 |
| public String getRef() | 获取文件中的URL的相对位置。 |
| public String getQuery() | 获取有关URL的查询信息。 |
| public String getPath() | 获取到URL的路径。 |
| public String getAuthority() | 获取URL的权限信息。 |
| public String getUserInfo() | 获得使用者的信息。 |
| public String getRef() | 获取URL的锚点。 |
3.URLConnection 类
完成URL的定义,然后您可以获得通信连接到URL。在Java.in的网络包中,定义了一个专门的URLConnection类,以代表与URL建立的通信连接,使用URL类 openConnection() 方法获取URLConnection类对象。
URLConnection
分类的主要方法见表3。
| 方法 | 说明 |
|---|---|
| void addRequestProperty(String key,String value) | 将一个关键值添加到指定的一般请求属性中。 关键字是用来识别请求的关键字 (例如 accept),value 指的是与该键关联的值。 |
| void connect() | 打开向这个URL引用的资源的通信链接(如果没有创建这样的链接)。 |
| Object getConnection() | 检索该URL链接的内容。 |
| InputStream getInputStream() | 返回从打开的链接中读取的输入流. |
| OutputStream getOutputSt 本文由 在线网速测试 整理编辑,转载请注明出处。 热门文章文章分类 |