第二十三章 JAVASocket应用--通信是这样练成的

第一节 网络基础简介

这里我们首先先简单介绍一下socket编程的基础知识,java对网络提供了高速的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中使用最多的就是socket,大家所熟悉的网络程序,像QQ,MSN等等,这些网络应用都使用了socket相关的技术,JAVA平台为我们提供了一组功能强大的类,为我们使用socket进行网络程序的开发,本专题就为大家一起揭开socket的神秘面纱,看看网络通信是怎样练成的,本节课我们会讲下面这些内容:网络基础知识、InetAddress类、URL类、TCP编程、UDP编程。
下面我们来看网络相关的基础知识,两台计算机要想通过网络进行通信,那么他们需要满足一些必然的条件:

  • 两台主机他们需要有一个唯一的标识,用来表示他们所处的身份,所在的位置,这就是IP地址
  • 需要有共同的语言,否则就会出现言语不通,无法交流,这就是我们的协议
  • 每台主机都需要有相应的端口号,一台主机上可以运行多个应用程序,那如何辨别不同应用程序的通信,我们需要使用端口号来进行区分。

这是两台主机通过网络进行通信的必备条件:IP地址,协议,端口号。那么TCP/IP协议是什么呢?
TCP/IP协议:TCP/IP是目前世界上应用最为广泛的协议,它是以TCP和IP为基础的不同层次上多个协议的集合,也成TCP/IP协议族,或TCP/IP协议栈。两个主机之间要进行通信,他们都要遵守这个TCP和IP的协议。
TCP:Transmission Control Protocol,它的全称叫传输控制协议
IP:Internet Protocol 叫互联网协议
我们在实际的应用当中,一般会将网络进行分层,常见的分为5层:
5 应用层
4 传输层
3 网络层
2 数据链路层
1 物理层
这叫TCP/IP的5层模型,最底层物理层是我们用户最直观接触到的网线、双绞线、网卡等等都处于我们的物理层;而TCP和IP协议,在我们的第4层也就是传输层,最上方的应用层也是用户直接接触到的,那么应用层有许多协议是大家所熟知的,像HTTP协议超文本传输协议,各位小伙伴们会经常上网看新闻,看网页或者电子商务等等,那么他们所使用的协议就是HTTP超文本传输协议;还有像FTP文件传输协议,可以进行文件的上传和下载,文件的共享等等;SMTP简单邮件传送协议可以进行文件的发送;Telnet远程登陆服务等等,这些都是应用层的协议。
IP地址:它是每台计算机唯一的标识,用来区分网络中的不同的主机,是两台主机通信所必不可少的。这个IP地址就非常类似我们现实当中的人的手机号码,比如说张三想给李四发消息,首先他要知道李四的手机号,通过这个手机号码他就可以定位到这个人,然后才能与之通信,IP地址也是一样的,它就是计算机的唯一的一个身份,唯一的标识,如果你想实现与另外一台计算机的通信,那么你就要知道对方的IP地址。我们说现实中的手机号码它有一个固定的格式,11位,有关部门制定的。而IP地址它也是有固定格式的。IP地址格式:数字型,如192.168.0.1 这是IPV4,也就是32位的长度。
端口:端口号实际上就是为了区分不同的应用程序,我们的一个主机它可以同时运行多个程序,比方说可以同时安装QQ,迅雷,暴风影音,idea,那么我们如何知道我们所发送的信息被另一台主机的对应的软件所接收呢?可不可能出现我们使用QQ发送消息,被对方的MSN接收到呢?这个是不会的,就是因为有端口号的存在。

  • 每个应用它都有唯一的端口号,用于区分不同的应用程序
  • 端口号的范围为0-65535,其中0-1023为系统所保留。如果我们去自定义端口号,建议使用1023往后的端口号
  • IP地址+端口号就组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础。
    举个例子:说我们的小伙伴们之间想互相通信,我们就需要知道对方的电话号码,而我们的电话号码在拨通以后,很可能会提示用户输入分机号,也就是说我们要真正与一个小伙伴通信,不单要知道他的电话号码,还需要知道他的分机号,通过电话号和分机号,才组成了一个完成的通信的信道,链路,与对方建立起一个通信的连接。那么IP地址和端口号的作用,就相当于是电话号码和分机号的作用,而socket它是网上网络通信的基础,我们也称之为是网络上双向通信线路的终结点,什么是终结点呢?简单来说,小伙伴通过电话号码加分机号组成这样一个双向的通信,此时AB小伙伴都可以说话双向交流,此时A和B就是这条链路的两个终结点,也就是两个终端,那么socket是TCP和UDP通信的基础,也是我们整个网络通信的基础。
  • 对于常用的协议所使用的端口号,http:80 ftp:21 telnet:23

JAVA对网络的支持
针对网络通信的不同层次,JAVA提供的网络功能有四大类:

  • InetAddress:用于标识网络上的硬件资源。说白了它主要标识IP地址等相关信息
  • URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据
  • Sockets:使用TCP协议实现网络通信的Socket相关的类
  • Datagram:使用UDP协议,将数据保存在数据报中,通过网络进行通信

第二节 JAVA中网络相关API的应用

1.JAVA中InetAddress的应用,了解了网络基础知识以后,我们来了解一下InetAddress类InetAddress类用于标识网络上的硬件资源,标识互联网协议(IP)地址的相关信息。打开API查看该类,没有构造方法,也就是没有办法直接通过new的方式来创建一个它的对象,我们接着往下看一下方法摘要,它提供了一些静态方法。如:

方法体 作用
getLocalHost() 返回本地主机
getByName() 在给定主机名的情况下,确定主机的IP地址
getByAdress() 在给定原始IP地址的情况下,返回InetAddress的对象
getByAdress() 根据提供的主机名和IP地址,创建InetAddress对象
getHostName() 获取此IP地址的主机名
getHostAddress() 返回IP地址的字符串(以文本表现形式)

下面我们来写一个实际的例子

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
/**
 * Created by Administrator on 2017/7/25.
 * InetAddress类
 */
public class Test01 {
    public static void main(String[] args) {
        //获取本机的InetAddress类的实例
        try {
            InetAddress address=InetAddress.getLocalHost();
            System.out.println("计算机名:"+address.getHostName());
            System.out.println("IP地址:"+address.getHostAddress());
            byte[] bytes=address.getAddress();//获取IP地址的字节数组
            System.out.println("字节形式的数组IP:"+ Arrays.toString(bytes));
            System.out.println(address);

            //根据主机名获取InetAddress实例
            InetAddress address2=InetAddress.getByName("PC-20160824WQYZ");
            System.out.println("计算机名:"+address2.getHostName());
            System.out.println("IP地址:"+address2.getHostAddress());
            InetAddress address3=InetAddress.getByName("192.168.1.103");
            System.out.p
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值