Skip to content

Latest commit

 

History

History
79 lines (43 loc) · 5.89 KB

File metadata and controls

79 lines (43 loc) · 5.89 KB

十二、网络和服务

问题

95.查找主机的 IP 地址

编写一个可以检索和打印主机 IPv4 地址的程序。如果找到多个地址,则应该打印所有地址。该程序应该在所有平台上运行。

96.客户端-服务器嘶嘶声

写一个可以用来玩 F izz-Buzz 游戏的客户端-服务器应用。根据游戏规则,客户端向服务器发送数字,服务器以嘶嘶声、嗡嗡声、嘶嘶声或数字本身作为回应。客户端和服务器之间的通信必须通过 TCP 完成。服务器应该无限期运行。只要用户输入 1 到 99 之间的数字,客户端就应该运行。

Fizz-Buzz 是一款儿童游戏,旨在教他们算术除法。一个玩家必须说出一个数字,另一个玩家应该回答:

  • 嘶,如果这个数能被 3 整除
  • 巴兹,如果这个数能被 5 整除
  • 如果这个数可以被 3 和 5 整除,那就嘶嘶作响
  • 在所有其他情况下,数字本身

97.比特币汇率

编写一个程序,显示最重要的货币(如美元、欧元或英镑)的比特币汇率。汇率必须从在线服务中获取,如: https://blockchain.info

98.使用 IMAP 获取电子邮件

写一个程序,可以使用 IMAP 从电子邮件服务器获取信息。该计划应该能够:

  • 从邮箱中获取文件夹列表
  • 从特定文件夹获取未读电子邮件

99.将文本翻译成任何语言

编写一个程序,可以使用在线服务将文本从一种语言翻译成另一种语言。应该可以指定您希望翻译的文本、文本的语言以及要翻译的语言。

100.检测图片中的人脸

写一个能从图片中识别人脸的程序。至少,程序必须检测人的面部区域和性别。这些信息应该打印到控制台上。图片必须从磁盘加载。

解决方法

95.查找主机的 IP 地址

主机信息,包括 IP 地址,可以通过系统特定的网络实用程序检索,如gethostbyname()。虽然这在所有平台上都可用,但使用方式不同,要求是编写一个在所有平台上都能工作的程序。有各种各样的开源跨平台网络库,比如 POCOAsio / Boost。AsioPOCO 是一个更复杂的库,不仅支持联网,还支持数据访问、密码学、XML、JSON、Zip 等。 Asio 是一个独立的、只有头文件的库,具有用于网络编程的一致异步 I/O 模型。它也可以作为 Boost 库的一部分,以及基于它的标准化提案...

96.客户端-服务器嘶嘶声

为了解决这个问题,我们将再次使用 Asio 库。然而,这次我们需要编写两个程序:一个服务器和一个客户端。服务器接受特定端口上的 TCP 连接,打开连接的套接字,并开始在套接字上读取。当它从套接字中读取一些东西时,它会将其解释为 Fizz-Buzz 游戏的数字,写回答案,并继续等待另一个输入。客户端连接到特定端口上的主机,发送从控制台读取的数字,然后等待从服务器接收答案,然后将其打印到控制台。

在服务器端,菲茨-巴斯游戏的实现相当简单,不需要额外的解释。...

97.比特币汇率

各种在线服务提供用于检查比特币市场价格和汇率的 API。您可以在https://blockchain.info/ticker免费使用的服务。一个GET HTTP 请求返回一个 JSON 对象,带有各种货币的市场价格。该原料药的文件可在:https://blockchain.info/api/exchange_rates_api找到。这里显示了这样一个 JSON 对象的摘录:

{   "USD": {      "15m": 8196.491155299998,      "last": 8196.491155299998,      "buy": 8196.491155299998,      "sell": 8196.491155299998,      "symbol": "$"   },   "GBP": {      "15m": 5876.884158350099,      "last": 5876.884158350099,      "buy": 5876.884158350099,      "sell": 5876.884158350099,      "symbol": "£"   }}

有各种各样的库可以用来传输...

98.使用 IMAP 获取电子邮件

互联网消息访问协议 ( IMAP )是一种使用 TCP/IP 从电子邮件服务器检索电子邮件的互联网协议。大多数电子邮件服务器提供商,包括像 Gmail、Outlook.com 和雅虎这样的大公司!邮件提供支持。有一些 C++ 库可以使用 IMAP,比如 *VMIME,*开源跨平台,支持 IMAP、POP、SMTP。但是,在本书中,我将使用 cURL (或者更具体地说, libcurl )使用 IMAPS 向电子邮件服务器发出 HTTP 请求。

所需的操作可以通过几个 IMAP 命令来实现。在下面的列表中,imap.domain.com是一个示例域:

  • GET imaps://imap.domain.com检索邮箱中的所有文件夹。如果...

99.将文本翻译成任何语言

许多云计算服务都提供文本翻译功能,包括微软认知服务、谷歌云翻译应用编程接口和亚马逊翻译。在本书中,我将在微软 Azure 中使用认知服务。Azure Cognitive Services 是机器学习和人工智能算法的集合,可用于轻松地为应用添加智能功能。包含的服务之一是文本翻译应用编程接口,它提供了语言检测、从一种语言到另一种语言的翻译以及将文本转换为语音等功能。我们还将使用 libcurl 进行 HTTP 请求。

虽然有各种使用文本翻译的定价计划...

100.检测图片中的人脸

这是使用微软认知服务可以解决的另一个问题。该组中可用的服务之一名为 Face API ,提供了用于检测人脸、性别、年龄、情绪和各种人脸地标和属性的算法,以及查找人脸相似性、识别人、基于视觉人脸相似性对图片进行分组等功能。

类似于 Text Translate API,有一个免费的计划,每月最多允许 30,000 笔交易,但每分钟只允许 20 笔。事务基本上是一个应用编程接口调用。有几个付费计划允许每月和每分钟进行更多的交易,但是为了解决这个问题,您可以使用免费层。还有...