简介

概述

客户与服务器之间是通过某个网络协议通信的。焦点是TCP/IP协议族,也称为网际协议族。

同一网络应用的客户和服务器无需处于同一个服务器,而这两个局域网是使用路由器连接到广域网(WAN)的。

路由器是广域网的架构设备。当今最大的广域网是因特网。

一个简单的时间获取服务器程序

/* 一个简单的时间获取服务器程序 */
#include "unp.h"                                              //自己编写的unp.h头文件.自行百度/谷歌怎么装环境
#include "myerr.h"
#include<time.h>int main(int argc,char *argv[])
{int serv_sock, connfd;struct sockaddr_in servaddr;char buff[MAXLINE];time_t ticks;serv_sock = socket(AF_INET, SOCK_STREAM, 0);if (serv_sock == -1)err_sys("socket() error");bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(5555);          /* daytime server */if(bind(serv_sock,(SA *) &servaddr, sizeof(servaddr)) == -1 )err_sys("bind() error");if(listen(serv_sock, 100) == -1)err_sys("listen() error");for ( ; ; ) {                            //无限循环connfd = accept(serv_sock, (SA *) NULL, NULL);if (connfd == -1)err_sys("accept() error");ticks = time(NULL);                    //time函数返回当前时间和日期snprintf(buff,sizeof(buff), "%.24s\t\n",ctime(&ticks));write(connfd,buff,strlen(buff));close(connfd);}
}

一个简单的时间获取客户程序

#include "unp.h"                                //自己编写的unp.h头文件.自行百度/谷歌怎么装环境
#include "myerr.h"int main(int argc,char *argv[])
{int sockfd, n;char recvline[MAXLINE + 1];struct sockaddr_in servaddr;if (argc != 2)err_quit("usage: a.out <IPaddress> ");if ((sockfd = socket(AF_INET, SOCK_STREAM,0)) < 0 )err_sys("socket error!");bzero(&servaddr,sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(13);          /* daytime server 时间端口*/if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)err_quit("inet_pton error for %s",argv[1]);          /* 将argv[1]中的点分十进制转换为二进制整数;将转换后的数据赋值给servaddr.sin_addr */if (connect(sockfd,(SA *) &servaddr, sizeof(servaddr)) < 0 )err_sys("*connect error!");while ( (n = read(sockfd,recvline, MAXLINE)) > 0) {recvline[n] = 0;if (fputs(recvline,stdout) == EOF)err_sys("fputs error!");}if (n < 0)err_sys("read error");exit(0);
}

错误处理:包裹函数

任何程序都必须检查给个函数调用是否返回错误。当发生错误时,就调用err_quit或err_sys函数输出一个出错消息并终止程序的运行。

既然发生错误时种植程序的运行时普遍的情况,可以通过定义包裹函数来缩短程序。

每个包裹函数完成实际的函数调用,检查返回值,并在发生错误时终止进程。约定包裹函数名时实际函数名的首字母大写形式。

例如:函数Socket是函数socket的包裹函数

sockfd = Socket(AF_INET, SOCK_STREAM, 0);int Socket(int family, int type, int protocol)
{int n;if ((n = socket(family,type,protocol)) < 0)err_sys("socket error");return(n);
}

Unix errno值

只要一个Unix函数中有错误发生,全局变量errno就被置为一个指明该错误类型的正值,函数本身则通常返回-1;

err_sys查看errno变量的值并输出相应的出错消息。例如当errno值等于ETIMEDOUT时,将输出“Connection timed out" (连接超时)

UNP 学习笔记(一):简介相关推荐

  1. OptiX资料学习笔记1——简介

    OptiX资料学习笔记1--简介 OptiX引擎的现状 目前有三种开源的API支持NVIDIA的光线追踪功能,分别为: DirectX Raytracing (DXR) DX的光线追踪API Vulk ...

  2. PCL学习笔记-PCL简介

    PCL(点云库)学习笔记 1.简介 点云数据的处理可以采用获得广泛应用的Point Cloud Library(点云库,PCL库). PCL库是一个最初发布于 2013年的开源c++库,它实现了大量点 ...

  3. RNN学习笔记(一)-简介及BPTT RTRL及Hybrid(FP/BPTT)算法

    RNN学习笔记(一)-简介及BPTT RTRL及Hybrid(FP/BPTT)算法 本文假设读者已经熟悉了常规的神经网络,并且了解了BP算法,如果还不了解的,参见UFIDL的教程. - 1.RNN结构 ...

  4. 51单片机学习笔记1 简介及开发环境

    51单片机学习笔记1 简介及开发环境 一.51单片机 1. STC89C52单片机简介 2. 命名规则 3. 封装 (1)PDIP (2)LQFP (3)PLCC (4)PQFP 二.STC8051结 ...

  5. Python学习笔记一简介及安装配置

    Python学习笔记一 参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e54 ...

  6. 51单片机学习笔记-1简介及点灯

    51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...

  7. Spring Integration学习笔记:简介

    本文是自己学习的总结笔记,主要学习资料如下. https://my.oschina.net/zhzhenqin/blog/86586 https://docs.spring.io/spring-int ...

  8. RISC-V学习笔记【简介】

    本学习笔记参考<手把手教你设计CPU--RISC-V处理器>一书,该书出版日期为2018年,可能部分内容已经过时,仅作为学习用途 RISC-V简介 RISC-V的设计理念就是"简 ...

  9. 树莓派学习笔记——wiringPi简介、安装和管脚说明

    1.WiringPi简介 WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3.wiringPi使用C或者C++开发并且可以被其他语言包转,例如python.ru ...

  10. CUBRID学习笔记 1 简介 cubrid教程

    CUBRID 是一个全面开源,且完全免费的关系数据库管理系统.CUBRID为高效执行Web应用进行了高度优化,特别是需要处理大数据量和高并发请求的复杂商务服务.通过提供独特的最优化特性,CUBRID可 ...

最新文章

  1. P1892 [BOI2003]团伙(并查集,反集)难度⭐⭐★
  2. 神策数据荣获 36 氪 「2020 中国新经济之王」之「最具影响力企业」和「最具竞争力企业」双奖 !...
  3. C语言十六进制转换为八进制(附完整源码)
  4. 杰瑞服务器虚拟化,大家在Mac中开发PHP,是用虚拟机的方式还是直接在Mac下搭建环境...
  5. Acwing 273. 分级
  6. 笛卡尔树详解带建树模板及例题运用(Largest Submatrix of All 1’s,洗车 Myjnie,Removing Blocks,SPOJ PERIODNI)
  7. Delphi6及SqlServer对于生僻字䶮的支持测试
  8. 这些“大学”,将被除名!
  9. html脚本src,HTML script脚本标签
  10. 添加数据要顺着来,删除数据要反着去。
  11. spring 中beanFactory和ApplicationContext的区别
  12. 【Ubuntu】MTK刷机工具MT8167版本打不开,缺少libpng12-0的解决方法
  13. php微信h5支付对接流程,微信H5支付接口开发的流程与常见问题
  14. STC8单片机驱动ADS1256多路AD采集
  15. android 混淆字符串,android 代码混淆
  16. PC微信逆向获取聊天表情
  17. 微博mysql连接错误_新浪微博错误代码详解
  18. Floyd-Warshall算法详解(转)
  19. AHB与VPB的区别
  20. java对txt文件操作_Java读取txt文件信息并操作。

热门文章

  1. invoke,十分钟搞定强大的Python任务自动化工具
  2. 〈大学〉问——王守仁
  3. windows10系统如何关闭数字签名认证
  4. 黑客美学 ——《黑客与画家》读书笔记
  5. 华为鸿蒙hicar演示,华为智能座舱的野心:HiCar上车,为鸿蒙OS铺路
  6. 2020-12-18 Dataset之COCO数据集:COCO数据集的简介、下载
  7. 计算机组成原理仿真,计算机组成原理虚拟仿真实验平台研究
  8. java valueOf()方法
  9. 从现在开始,学习编程
  10. java 匿名类调用方法_Java匿名内部类使用与示例