本次博客主要总结参考《Unix网络编程》卷一前四章的知识,对TCP一对一通信进行重新改造和分析,经典就是经典,无可替代!

一、为什么使用包裹函数

任何现实世界的程序都必须检查每个函数调用是否返回错误。当某个函数发生错误时,就调用我们自己的err_quit或err_sys函数输出一个错误消息并终止程序的运行(当然有时候并非简单的终止程序运行,还需要检查问题所在:系统调用是否被中断了)。

既然发生错误时终止程序的运行时普遍的情况,我们可以通过定义包裹函数(wrapper function)来缩短程序。每个包裹函数完成实际函数的函数调用,检查返回值,并在发生错误时终止进程。我们约定包裹函数名是实际函数名的首字母大写形式。例如

listenfd=Socket(AF_INET,SOCK_STREAM,0);

包裹函数Socket定义为:

int Socket(int family,int type,int protocol)

{

int n;

if ((n = socket(family,type,protocol)) < 0)

err_sys("socket error");

return n;

}

因此,在UNP课程后面的所有例子中,我们建议使用包裹函数的形式,不仅缩短了代码,有利于开发者看清楚具体的功能实现;而且考虑了对于每一步的出错信息及处理,使代码更具有健壮性。

二、Unix errno值

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

errno的值是只在函数发生错误时设置。如果函数不返回错误,errno的值就没有定义。errno的所有正数错误值都是常值,具有以“E”开头的全大写字母名字,并通常在头文件sys/errno.h定义。值0不表示任何错误。

在全局变量中存放errno值对于共享所有全局变量的多个线程并不适合。

基于TCP(面向连接)的socket编程,分为服务器端和客户端

服务器端的流程如下:

(1)创建套接字(socket)

(2)将套接字绑定到一个本地地址和端口上(bind)

(3)将套接字设为监听模式,准备接收客户端请求(listen)

(4)等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)

(5)用返回的套接字和客户端进行通信(send/recv 、write/read)

(6)返回,等待另一个客户请求。

(7)关闭套接字。

客户端的流程如下:

(1)创建套接字(socket)

(2)向服务器发出连接请求(connect)

(3)和服务器端进行通信(send/recv 、write/read)

(4)关闭套接字

总结

以上是编程之家为你收集整理的Unix网络编程思想全部内容,希望文章能够帮你解决Unix网络编程思想所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

linux unix编程思想,Unix网络编程思想相关推荐

  1. Linux多线程、多进程、网络编程常见问题

    Linux多进程.多线程.网络编程常见问题 入门 1.GCC的工作流程? 工作流程: 预处理.编译.汇编.链接 具体流程如下: 2.gcc常用的参数选项 3.Makefile介绍 3.1.Makefi ...

  2. linux下C语言socket网络编程简例

    转自博文:http://blog.csdn.net/kikilizhm/article/details/7858405 在练习写网络编程时,该例给了我帮助,在写服务器时,我把while逻辑位置想法错了 ...

  3. java 网络编程 聊天_Java——网络编程(实现基于命令行的多人聊天室)

    目录: 1.ISO和TCP/IP分层模型 2.IP协议 3.TCP/UDP协议 4.基于TCP的网络编程 5.基于UDP的网络编程 6.基于TCP的多线程的聊天室的实现 1.ISO和TCP/IP分层模 ...

  4. 【JavaSe】网络编程篇(一) 网络编程入门

    JavaSe·网络编程篇(一) 网络编程入门 1. 软件结构 C/S结构:全称为Client/Server结构,是指客户端和服务器结构.常见程序有QQ.百度网盘等软件 B/S结构 :全称为Browse ...

  5. 网络编程笔记之网络编程入门

    网络编程的概念 网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的.中间最主要的就是数据包的组装,数据包的过滤 ...

  6. 【Java 18】网络编程 - 概述、网络编程要素、IP和端口号、网络协议、TCP、UDP、URL

    网络编程 - 概述.网络编程要素.IP和端口号.网络协议.TCP.UDP.URL 网络编程 1 网络编程概述 2 网络通信要素概述 3 通信要素1:IP和端口号 3.1 内容 3.2 InetAddr ...

  7. 【Linux网络编程】TCP网络编程中connect listen和accept三者之间的关系

    00. 目录 文章目录 00. 目录 01. TCP服务端和客户端流程 02. connect函数 03. listen函数 04. 三次握手 05. accept函数 06. 附录 01. TCP服 ...

  8. 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系

    基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: connect()函数 对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三 ...

  9. Linux操作系统下C语言网络编程(全文23475字,包含了Linux系统下所有网络编程的知识点,附程序代码)

    一.简介 如今网络应用随处可见,web.http.email 等这些都是网络应用程序,他们都有着基于相同的基本编程模型,有着相似的整体逻辑结构,并且还有着相同的编程接口.我们需要了解基本的客户端-服务 ...

  10. 【计算机网络】Linux环境中的TCP网络编程

    文章目录 前言 一.TCP Socket API 1. socket 2. bind 3. listen 4. accept 5. connect 二.封装TCPSocket 三.服务端的实现 1. ...

最新文章

  1. AI 重新定义金融,颠覆投资模式
  2. 图解Oracle dump 命令初步
  3. Java集合:数组的使用
  4. 基于梯度下降法的——线性回归拟合
  5. 720x576P时序参数图
  6. 51Nod 1494 选举拉票(权值线段树)
  7. 【线程】——volatile关键字
  8. Entity Framework 实现in查询
  9. 计算机 word 节是什么,Word分节符的含义和使用方法详解-word技巧-电脑技巧收藏家...
  10. 21年11月第二周 力扣每日一题记录
  11. 微信点餐系统中出现的小问题记录
  12. 提高客户转化率的关键点
  13. 高中计算机工作成效,学年工作成效与反思
  14. 一位二本毕业4年的java程序员
  15. 弹性盒子flex布局
  16. 蓝桥云课linux入门4:目录结构及文件基本操作
  17. 第十二届蓝桥杯大赛模拟赛(第二期)
  18. java中的repo什么意思_java – Spring数据jpa repo,为什么需要接口服务和服务实现
  19. 百度通用翻译api使用
  20. awk分析话单列子 tcp连接失败率,及失败连接的topN

热门文章

  1. 《炬丰科技-半导体工艺》无损伤清洗气泡振荡超音波技术
  2. [Unity]实现类似传奇暗黑破坏神物品掉落显示物品名称
  3. DLL劫持注入技术分析、过各种游戏保护!让你做你爱做的事情!
  4. Python爬虫、数据清洗与可视化-2 -requests
  5. 华为之后,OPPO小米们学不会高端?
  6. mysql(1)基本SQL语句
  7. 我的15年操作系统开源路——RT-Thread创始人熊谱翔
  8. 新浪微博PHP7升级实践
  9. 雅典奥运会开幕式盛况 印象展示无比健壮
  10. 手机在网状态/在网时长接口简介