UNP 学习笔记(一):简介
简介
概述
客户与服务器之间是通过某个网络协议通信的。焦点是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 学习笔记(一):简介相关推荐
- OptiX资料学习笔记1——简介
OptiX资料学习笔记1--简介 OptiX引擎的现状 目前有三种开源的API支持NVIDIA的光线追踪功能,分别为: DirectX Raytracing (DXR) DX的光线追踪API Vulk ...
- PCL学习笔记-PCL简介
PCL(点云库)学习笔记 1.简介 点云数据的处理可以采用获得广泛应用的Point Cloud Library(点云库,PCL库). PCL库是一个最初发布于 2013年的开源c++库,它实现了大量点 ...
- RNN学习笔记(一)-简介及BPTT RTRL及Hybrid(FP/BPTT)算法
RNN学习笔记(一)-简介及BPTT RTRL及Hybrid(FP/BPTT)算法 本文假设读者已经熟悉了常规的神经网络,并且了解了BP算法,如果还不了解的,参见UFIDL的教程. - 1.RNN结构 ...
- 51单片机学习笔记1 简介及开发环境
51单片机学习笔记1 简介及开发环境 一.51单片机 1. STC89C52单片机简介 2. 命名规则 3. 封装 (1)PDIP (2)LQFP (3)PLCC (4)PQFP 二.STC8051结 ...
- Python学习笔记一简介及安装配置
Python学习笔记一 参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e54 ...
- 51单片机学习笔记-1简介及点灯
51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...
- Spring Integration学习笔记:简介
本文是自己学习的总结笔记,主要学习资料如下. https://my.oschina.net/zhzhenqin/blog/86586 https://docs.spring.io/spring-int ...
- RISC-V学习笔记【简介】
本学习笔记参考<手把手教你设计CPU--RISC-V处理器>一书,该书出版日期为2018年,可能部分内容已经过时,仅作为学习用途 RISC-V简介 RISC-V的设计理念就是"简 ...
- 树莓派学习笔记——wiringPi简介、安装和管脚说明
1.WiringPi简介 WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3.wiringPi使用C或者C++开发并且可以被其他语言包转,例如python.ru ...
- CUBRID学习笔记 1 简介 cubrid教程
CUBRID 是一个全面开源,且完全免费的关系数据库管理系统.CUBRID为高效执行Web应用进行了高度优化,特别是需要处理大数据量和高并发请求的复杂商务服务.通过提供独特的最优化特性,CUBRID可 ...
最新文章
- P1892 [BOI2003]团伙(并查集,反集)难度⭐⭐★
- 神策数据荣获 36 氪 「2020 中国新经济之王」之「最具影响力企业」和「最具竞争力企业」双奖 !...
- C语言十六进制转换为八进制(附完整源码)
- 杰瑞服务器虚拟化,大家在Mac中开发PHP,是用虚拟机的方式还是直接在Mac下搭建环境...
- Acwing 273. 分级
- 笛卡尔树详解带建树模板及例题运用(Largest Submatrix of All 1’s,洗车 Myjnie,Removing Blocks,SPOJ PERIODNI)
- Delphi6及SqlServer对于生僻字䶮的支持测试
- 这些“大学”,将被除名!
- html脚本src,HTML script脚本标签
- 添加数据要顺着来,删除数据要反着去。
- spring 中beanFactory和ApplicationContext的区别
- 【Ubuntu】MTK刷机工具MT8167版本打不开,缺少libpng12-0的解决方法
- php微信h5支付对接流程,微信H5支付接口开发的流程与常见问题
- STC8单片机驱动ADS1256多路AD采集
- android 混淆字符串,android 代码混淆
- PC微信逆向获取聊天表情
- 微博mysql连接错误_新浪微博错误代码详解
- Floyd-Warshall算法详解(转)
- AHB与VPB的区别
- java对txt文件操作_Java读取txt文件信息并操作。