简介

概述

客户与服务器之间是通过某个网络协议通信的。焦点是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. zend studio输出中文乱码的问题
  2. case when完成不同条件的显示
  3. DELL服务器安装过程中出现的ERROR及解决方案
  4. 11WinDlg 对话框一
  5. 利用Pytorch的C++前端(libtorch)读取预训练权重并进行预测
  6. ios 自定义拍照页面_无需解锁也能使用的iOS实用小组件
  7. 单例设计模式-ThreadLocal线程单例
  8. Nginx+Tomcat负载均衡访问网页出现报错HTTP Status 400 – 错误的请求
  9. mysqldump文件中有SET @@SESSION.SQL_LOG_BIN= 0;解决方法
  10. python网络验证系统_python3+django2 开发易语言网络验证(下)
  11. 同步中心服务器,同步中心以非常慢的速度同步脱机文件 - Windows Server | Microsoft Docs...
  12. ejb3.0 中数据库的配置
  13. AIR如何实现窗口顶置
  14. 死磕java并发系列
  15. SkinSharp破解版与模版皮肤下载与使用
  16. 单板计算机中VPX,VME,cPCI,AdvanceMC,PMC
  17. 8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码
  18. python中撤销的快捷键_python常用快捷键
  19. 出入库管理软件如何修改格式
  20. linux登陆端口号和协议,linux iso镜像下载 协议号与端口号大全

热门文章

  1. 系统管理员应该知道的 20 条 Linux 命令
  2. new ext.toolbar控制按钮间距_消防设施常见安装间距汇总
  3. vue 数字图片验证码
  4. Java并发编程(四)- 资源分配(互斥)
  5. 二:企业设立、经营与财务报表
  6. 在进行CMOS设置时也会出现死机
  7. 男人你应该去尝试创业
  8. idea解决搜狗输入法不跟随BUG
  9. NP-complete
  10. centos8 配置 dns_centos 8 集群Linux环境搭建 - 凭栏莫听雨落