Java网络编程

Java网络编程

计算机网络基础知识

计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来的,实现资源共享和数据传输的系统。网络编程就是编写程序使互联网的两个(或多个)设备(如计算机)之间进行数据传输。网络应用程序模型(软件结构)有:

C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。

B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。

两种架构各有优势,但是无论哪种架构,都离不开网络的支持。网络编程,就是在一定的协议下,实现两台计算机的通信的程序。

 

计算机网络是个复杂的系统,按照人们解决复杂问题的方法,把计算机网络实现的功能分到不同的层次上,层与层之间用接口连接。通信的双方具有相同的层次,层次实现的功能由协议数据单元(PDU)来描述。不同系统中的同一层构成对等层,对等层之间通过对等层协议进行通信,理解彼此定义好的规则和约定。

计算机网络体系结构是计算机网络层次和协议的集合,网络体系结构对计算机网络实现的功能,以及网络协议、层次、接口和服务进行了描述,但并不涉及具体的实现。接口是同一节点内相邻层之间交换信息的连接处,也叫服务访问点(SAP)。

 

网络体系结构主要有两个

☆OSI即OSI/RM(Open System Interconnection Reference Model:即开放系统互连参考模型):模型过于理想化,未能在因特网上进行广泛推广;

☆TCP/IP(Transmission Control Protocol/Internet Protocol:传输控制协议/因特网互联协议):事实上的国际标准。

TCP/IP四层模型与OSI七层模型的对应关系参见下图:

 

TCP/IP协议族体系结构以及主要协议

TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层和应用层。每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。参见下图:

TCP/IP分层模型的四个协议层分别完成的功能:  

第一层网络接口层:网络接口层包括用于协作IP数据在已有网络介质上传输的协议。实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能。相反,它定义像地址解析协议(Address Resolution Protocol,ARP)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。

第二层网络层:网络层对应于OSI七层参考模型的网络层。本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息。  

第三层传输层:传输层对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。其中TCP协议(Transmission Control Protocol)提供可靠的数据流运输服务,UDP协议(Use Datagram Protocol)提供不可靠的用户数据报服务。  

第四层应用层:应用层对应于OSI七层参考模型的应用层和表达层。因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等。

 

位于网络中的计算机具有唯一的IP地址,这样不同的主机可以互相区分。客户端-服务器是一种最常见的网络应用程序模型。服务器是一个为其客户端提供某种特定服务的硬件或软件。客户机是一个用户应用程序,用于访问某台服务器提供的服务。端口号是对一个服务的访问场所,它用于区分同一物理计算机上的多个服务。套接字用于连接客户端和服务器,客户端和服务器之间的每个通信会话使用一个不同的套接字。TCP协议用于实现面向连接的会话。

 

Java网络编程

☆Java 中有关网络方面的功能都定义在 java.net 程序包中。Java 用 InetAddress 对象表示 IP地址,该对象里有两个字段:主机名(String) 和 IP 地址(int)。

☆类 Socket 和 ServerSocket

实现了基于TCP协议的客户端-服务器程序。Socket是客户端和服务器之间的一个连接,连接创建的细节被隐藏了。这个连接提供了一个安全的数据传输通道,这是因为 TCP 协议可以解决数据在传送过程中的丢失、损坏、重复、乱序以及网络拥挤等问题,它保证数据可靠的传送。

☆类 URL 和 URLConnection 提供了最高级网络应用。URL 的网络资源的位置来同一表示 Internet 上各种网络资源。通过URL对象可以创建当前应用程序和 URL 表示的网络资源之间的连接,这样当前程序就可以读取网络资源数据,或者把自己的数据传送到网络上去。

 

Java语言对网络编程提供了良好的支持。通过其提供的接口我们可以很方便地进行网络编程。

网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。

java.net 包提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。

 

(一)、Socket 编程

套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。

当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。

java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。

 

java.net 包中提供了两种常见的网络协议的支持:

TCP:TCP(Transmission Control Protocol,传输控制协议) 是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP 层是位于 IP 层之上,应用层之下的中间层。TCP 保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。

UDP:UDP (User Datagram Protocol,用户数据报协议),位于 OSI 模型的传输层。一个无连接的协议。提供了应用程序之间要发送数据的数据报。由于UDP缺乏可靠性且属于无连接协议,所以应用程序通常必须容许一些丢失、错误或重复的数据包。

 

IP地址用于指明因特网上的一台计算机在网络中的地址,用32位二进制代码表示一个网络地址。地址分A、B、C、D、E五类,常用的是A、B、C三类:

A(1.0.0.0-126.255.255.255):0,7位网络号,后24位为主机号;

B(128.0.0.0-191.255.255.255):10,14位网络号,后16位为主机号;

C(192.0.0.0-223.255.255.255):110,21位网络号,后8位为主机号;

D(224.0.0.0-239.255.255.255):1110,28位多点广播组标号;

E(240.0.0.0-254.255.255.255):1111,保留试验使用。

 

通常,IP地址用四段十进制数表示(8位一段)。例如:

    116.255.226.187

或用文字域名表示。例如:

  www.baidu.com

在因特网上,域名服务器(DNS:Domain Name Server)执行文字名称到二进制网络地址的映射。

 

InetAddress类

Java.net包中有InetAddress类的定义,InetAddress类的对象用于IP地址和域名,该类提供以下方法:

getByName(String s):在给定主机名的情况下确定主机的IP地址,如果参数为null,获得的是本机的IP地址;

String getHostName():获取InetAddress对象的域名;

String getHostAddress():获取InetAddress对象的IP地址;

getLocalHost():获得一个InetAddress对象,该对象含有本地机的域名和IP地址。

 

、通过net.InetAddress类的InetAddress.getByName()方法,在给定主机名的情况下确定主机的IP地址,如果参数为null,获得的是本机的IP地址:

import java.net.InetAddress;

import java.net.UnknownHostException;

 

public class HostSpecificIPAddress {

   public static void main(String[] args) {

      InetAddress IP1 = null;

      InetAddress IP2 = null;

      try {

         IP1 = InetAddress.getByName("www.yiibai.com");

         IP2 = InetAddress.getByName(null);

      } catch (UnknownHostException e) {

         System.exit(2);

      }

      System.out.println(IP1.getHostName() + " IP is = " + IP1.getHostAddress());

      System.out.println(IP2.getHostName() + " IP is = " + IP2.getHostAddress());

      System.exit(0);

   }

}

 

运行之,结果如下:

www.yiibai.com IP is = 112.124.103.85

localhost IP is = 127.0.0.1

 

 

☆Socket 编程。参见https://www.runoob.com/java/java-networking.html

 

 

(二)、URL 处理

统一资源定位符URL(Uniform Resource Locator)是www客户机访问Internet时用来标识资源的名字和地址。超文本链路由统一资源定位符URL维持。URL的格式是:

    <METHOD>://<HOSTNAME:PORT>/<PATH>/<FILE>

其中:Method是传输协议:HOSTNAME是文档和服务器所在的Internet主机名(域名系统中DNS中的点地址);PORT是服务端口号(可省略,HTTP 协议默认的端口号为 80);PATH是路径名,FILE是文件名。例如:

    http://www.weixueyuan.net/(http是协议名,www.weixueyuan.net是主机名)

    http://www.weixueyuan.net/view/6079.html (www.weixueyuan.net是主机名,view/6079.html是文件路径和文件名)

 

URL类

Java.net包有URL类,一个URL对象可以表示一个网络资源。程序利用URL对象能实现Internet寻址、网络资源的定位连接、在客户机与服务器之间直接访问等。URL类的构造方法是

    URL(String s)

其中,s指出网络中的一个资源。

 

、显示了如何通过net.URL类的url.getProtocol()和url.getFile()方法等获取URL的部分。

import java.net.URL;

public class PartsOfURL {

    public static void main(String[] args) throws Exception {

        String webUrl = "http://www.yiibai.com/javaexamples/index.html";

        URL url = new URL(webUrl);

        System.out.println("URL is " + url.toString());

        System.out.println("protocol is " + url.getProtocol());

        System.out.println("file name is " + url.getFile());

        System.out.println("host is " + url.getHost());

        System.out.println("path is " + url.getPath());

        System.out.println("port is " + url.getPort());

        System.out.println("default port is " + url.getDefaultPort());

    }

}

 

运行之,结果如下:

URL is http://www.yiibai.com/javaexamples/index.html

protocol is http

file name is /javaexamples/index.html

host is www.yiibai.com

path is /javaexamples/index.html

port is -1

default port is 80

【其中,port -1是访问不了的】

 

☆URL 处理。参见https://www.runoob.com/java/java-url-processing.html

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值