Android网络编程(一)--网络的体系结构篇

从这篇开始开始写一系列关于Android中网络编程的博客,作为第一篇,我准备从最基本的原理结构讲起,先说一下计算机网络的体系结构。
我们把问题抽出来讨论:

1、计算机网络体系结构的作用
2、计算机网络体系结构是什么样的
3、计算机网络体系结构如何实现

一、计算机网络体系结构的作用

先让我们设想一个问题,如果两个从来没有见过的人要见面,我们先假设双方没有手机等实时通信的工具,那他们会事先做哪些事。
1、首先要知道见面的地址。
2、其次还有说好见面的时间。
3、因为双方 不知道对方长什么样,所以还要一个暗号,来判断是否是你找的人。
4、显然光这些还是不够的,假如其中一个人因为有事情没有去却无法通知到对方,那另一个人岂不是要等到天荒地老了,所以还要规定一个等待时间吧。
5、还有要确定一下那个地址是否能到达,如果不能到底怎么办。
6、如果两个人说的语言不相同怎么办,就需要一个翻译官了。
这只是一个简单的设想,计算机网络也有许多类似的问题,在计算机网络设计的过程中也会存在很多问题,比如说“见面地址”对应于网络地址,以便于能找到对方,为了双方能找到见面地址,所以要进行地址路径的测试,为了消除死等的情况,还要规定超时时间等,所以为了简化这些问题,计算机网络采用了分层的思想,每一层完成相应的功能,并且下层为上层提供服务,这样上层可以复用下层的服务。
计算机网络采用分层的思想,使得各层之间相互独立,灵活性也更好,而且易于实现和维护,能够促进标准化的工作,解决 了计算机网络中的差错控制、流量控制、分段与重装、复用和分用以及连接建立与释放等问题。

二、计算机网络体系结构是什么样的

上文说到计算机网络采用分层的思想,下面我们就来说说计算机网络有哪些层次结构,各层次结构是什么样的,作用是什么样的,其实国际化标准化组织将计算机网络分为了7层,但是由于各种原因,并没有推广并使用,现在我们大多数使用的是TCP/IP协议模型。这个模型只有四层。
这里写图片描述
TCP/IP协议从上到下分为应用层、运输层、网际层和网络接口层四层。
网络接口层:网络接口层的主要作用是将网际层交下来的IP数据报组装成帧,在两个相邻节点之间的链路上传送帧,每一个帧包括数据和必要的控制信息。
网际层:网际层,有些地方也叫作网络层,负责为分组交换网上的不同主机提供通讯服务。在发送数据时,网际层把运输层产生的报文或用户数据报封装成分组或包进行传送,由于网际层使用的IP协议,所以又称为IP数据报。
运输层:它的主要任务就是负责向两个主机中进程之间的通信提供通用的数据传输服务。运输层主要采用以下TCP和UDP两种协议。TCP主要提供面向连接的、可靠的传输,传输的单位为报文段。而UDP提供的是无连接的、尽最大努力交付的数据传输,传输单位是用户数据报。因为TCP提供了可靠的传输,所以会在这层进行拥塞控制和流量控制。同样TCP是面向连接的,所以在连接时会有三次握手,和释放时的四次挥手。
这里写图片描述

这里写图片描述
应用层:应用层主要定义了进程间通信的规则,也就是交互数据的格式。其中包括Http协议,FTP协议等,Http协议和FTP协议使用的传输层协议是TCP。
现在分析了各层的作用,下面我们就来想想如何实现它。

三、计算机网络体系结构如何实现

Android使用java语言进行编写应用,我们就来看看再Java中如何进行网络编程,在Java API中提供了socket,socket其实就是封装了TCP或UDP协议以及下面几层的协议,所以我们使用时可以使用socket来实现TCP或UDP以下的几层协议。
下面我们用Socket写一个简单的例子:
服务器端:


public class MyServer {
    public static final int PORT = 9999;

    public static void main(String[] args) {

        try {
            InetAddress inet4Address = Inet4Address.getLocalHost();
            System.out.println("本机地址为:" + inet4Address.getHostAddress());
            ServerSocket serverSocket = new ServerSocket(PORT);
            Socket socket = serverSocket.accept();
            System.out.println("客户端连接成功...");
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String clientInfo = reader.readLine();
            System.out.println("客户端发送的数据为--->" + clientInfo);
            PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
            printWriter.println("server is good!");
            printWriter.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

客户端:


public class MyClient {
    public static void main(String[] args) {
        InetAddress inet4Address;
        try {
            inet4Address = Inet4Address.getLocalHost();
            Socket socket = new Socket(inet4Address, MyServer.PORT);

            PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
            printWriter.println("client say Hello Server!");
            printWriter.flush();

            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String servervInfo = reader.readLine();
            System.out.println("服务器端发送的数据为--->" + servervInfo);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这个例子是客户端先向服务器端发送一条信息,然后客户端再接收服务器端发来的一条信息。
程序运行结果:
服务器端打印:

本机地址为:192.168.43.119
客户端连接成功...
客户端发送的数据为--->client say Hello Server!

客户端打印:

服务器端发送的数据为--->server is good!

好了,这一篇就将计算机网络的相关知识介绍到这,最后这个例子虽然传输成功了相关数据,但是没有实现应用层协议,数据没有任何规则和格式,下一篇向大家介绍Http协议,以及如何来实现。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值