网络编程:网络编程模型

这是张富涛的第6篇原创

网络编程:网络编程模型

1. 写在前面

无论TCP还是UDP的网络编程,都是由服务器端和客户端组成,当然,如果B/S结构(类似Web开发)则只需要实现服务器端即可,所以介绍网络编程时,我们以C/S结构为基础进行介绍

2. 客户端网络编程模型

客户端(Client)一般为发起连接的程序,编程时一般由以下三个步骤实现:

  1. 建立网络连接:

    与服务器端建立起网络连接,建立时需要指定服务器端的ip地址以及端口号,建立完成后,即可进行网络通信。

  2. 交换数据:

    建立成功连接之后即可进行数据交换,交换时需按照“客户端发出一条请求,服务器端响应一条请求,客户端不发送请求则服务器端不响应”的形式进行。

    (一般“交换”数据这个步骤可能会重复进行,而这种操作又是耗时操作,所以一般会单独建立线程进行网络通讯)

  3. 关闭网络连接:

    数据交换完毕后,则关闭网络连接,释放占用端口及内存等系统资源。

3. 服务器端网络编程模型

服务器端(Server)指网络编程中被动等待连接的程序,由于服务器端一般实现核心逻辑及算法以及数据存储等业务,所以编程步骤与客户端不同。大致分为四个步骤:

  1. 监听端口:

    服务器端属于被动等待连接,所以服务器端启动以后,不需要发起连接,而只需要监听本地计算机的某个固定端口即可。这个端口就是服务器端开放给客户端的端口,服务器端程序运行的本地计算机的ip地址就是要监听的ip地址。

  2. 获得连接:

    一般客户端对这个服务器端发起并连接时,服务器端可以获取到这个连接,这个连接包括客户端的ip地址等信息,这个连接可以用其进行数据交换。

    (一般每一个连接进行数据交换需要一个单独的线程进行处理)

  3. 数据交换

    服务器端通过获得到的连接进行数据交换,首先是获得到客户端传送来的数据,然后进行逻辑处理(业务处理等核心算法或数据存储等)再将处理之后的结果(或其他需要客户端知道的信息)发送给客户端。(接收之后再发送这个步骤与客户端交换数据的步骤不同。)

    (对于“数据交换”这个步骤,由于是耗时操作,我们一般新建一个线程单独处理)

  4. 关闭连接

    当服务器端需要关闭,不再接收任何客户端的连接时,我们需要关闭连接,释放服务器端监控的端口及占用的内存等系统资源。

服务器端的开发逻辑就像我们打电话致电客服,电话号码就是我们服务器端监控的端口号,当我们每有一个电话打进来时,我们就要分配一位客服与其进行通信,这个过程就是新建一个线程。

这就是服务器端的编程模型,只是TCP方式是需要建立连接的,对于服务器端的压力比较大,而UDP是不需要建立连接的,对于服务器端的压力比较小罢了。

4. 一个基础的网络类

在进入TCP编程之前,我们先介绍一个基础的网络类:InetAddress

通过它的字面意思,我们尝试着猜测它可能代表一个网络上的地址,下面通过代码演示它的基本功能和用法:

(Java对于网络编程的相关类都放在了java.net包下,InetAddress也不例外)

运行Main函数的执行结果为:

由于这段代码包含了“万方数据知识服务平台”的网络地址,所以执行时需要联网,Try、catch捕获了如果不联网时出现的异常。

这个类是一个基础的网络类,但是这个类不是必须的,在我们进行连接时也可以使用“ip+端口号”的字符串形式替代。

回到我们这个Demo代码中,我们看到 InetAddress.getByName() 这个方法我们只需要将一个域名(www.wanfangdata.com.cn)传递进去即可获取到这个域名对应的公网ip地址,在Java语言中,对于网络编程实现了较好的支持,包括我们客户端模型的“建立连接”步骤,由于Java的高度封装,我们只需要指定ip地址和端口号就可以了。正是因为这种高度封装,使得我们使用Java进行网络编程时,对于网络底层的编程变得很困难,但是也正因为这种封装使得我们用Java进行网络编程时极为便利,这也是Java语言进行网络编程很受欢迎的原因之一,这正所谓“成也萧何,败也萧何”!

小伙伴们请仔细理解客户端及服务器端的模型及逻辑顺序,我们将在下一篇进入实战!



---------------

公众号:张富涛的学习笔记(ID:futaoNT)

知乎:张富涛

CSDN:张富涛

B站:你给的宝物

这是一个在夜晚可以靠编程拯救世界的程序员,关注他将在第一时间获悉他的知识、工作心得!

长按下图二维码关注:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值