这部分我要学习的是Unix下的网络编程,参照的书籍是W. Richard. Stevens的《Unix网络编程》卷一和卷二,由于本身现在从事的工作是java后台开发,对客户端-服务器的这种通信并不陌生。

学习Unix下网络编程开发不是以后要从事这方面工作,是想学一下计算机网络知识,包括其中各种概念的厘清,和熟悉C编程、网络编程。

网络编程说白了很简单,就是两个对象(机器、应用程序)之间相互通信。通信是一个信息交换的过程,像我们人与人之间交流说话就是一种通信过程,因为几乎每天都会与人交流,导致我们都太熟悉了这个过程。

现在要将两台机器之间进行通信的话,需要确定通信的协议。协议是一个大的概念,这里先不去细讲。

可以设想两台机器之间通信是个啥情况:

1. 机器也有语言,最根本的就是使用0-1这种二进制数字了,不管是信息的存储还是指令都是若干二进制字符。不过二进制单位太小,比较方便的还是使用字节。

2. 机器A发送了很多个字节给机器B,B得知道如何解析这段字节

感觉写的太细。。。

客户和服务器通过某个应用协议进行数据交换。

现在Unix网络通信关注的点就在于客户和服务器进行接触的这块。

程序之间相互通信之间首先要确定的是通信协议(protocol)

服务器可以想象成移动营业厅的服务厅,从早上上班到晚上下班开始就一直有人等着有人来,然后给别人提供服务,放到Unix中就是守护进程(daemon)

借用移动营业厅的场景来说,一般都是我们主动去到营业厅,请求别人服务,比如充话费、改套餐等,很少有移动营业厅的人会主动找到我们说提供服务。放到我们这就是一般再设计的时候都是由客户首先发起请求,这样可以简化协议和程序。

但是也有,比如某个月我可能流量超出太多(目前经常这样),会有客服打电话提醒我要不要办理流量加油包,这种操作就是异步回调(asynchronous callback),也就是服务器会向客户发起请求。

Unix下网络编程概述的更多相关文章

  1. Android网络编程概述

    Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...

  2. unix下网络编程之I/O复用(三)

    poll函数 在上文unix下网络编程之I/O复用(二)中已经介绍了select函数的相关使用,本文将介绍另一个常用的I/O复用函数poll.poll提供的功能与select类似,不过在处理流设备时, ...

  3. Windows Embedded Compact 7网络编程概述(下)

    11.1.1 Select I/O模型 在Windows CE中,Select模型是唯一被支持的I/O模型.Select I/O模型就是利用select函数对I/O进行管理. 函数select的功能在 ...

  4. unix下网络编程之I/O复用(一)

    什么是I/O复用? What we need is the capability to tell the kernel that we want to be notified if one or mo ...

  5. JAVA学习第五十九课 — 网络编程概述

    网络模型 OSI(Open System Interconnection)开放系统互连:參考模型 TCP/IP 网络通讯要素 IP地址 port号 传输协议 网络參考模型 七层OSI模型的基本概念要了 ...

  6. Linux环境下网络编程杂谈《转》

    今天我们说说“Pre-网络编程”.内容比较杂,但都是在做网络应用程序开发过程中经常要遇到的问题. 一.大端.小端和网络字节序 小端字节序:little-endian,将低字节存放在内存的起始地址: 大 ...

  7. Windows Embedded Compact 7网络编程概述(上)

    如今,不论是嵌入式设备.PDA还是智能手机,网络都是必不可少的模块.网络使人们更方便地共享设备上的信息和资源.而且,利用智能手机浏览互联网,也逐渐成为生活中的常见手段.物联网所倡导的物物相联,也离不开 ...

  8. linux下网络编程学习——入门实例ZZ

    http://www.cppblog.com/cuijixin/archive/2008/03/14/44480.html 是不是还对用c怎么实现网络编程感到神秘莫测阿,我们这里就要撕开它神秘的面纱, ...

  9. UNIX/Linux网络编程基础:图解TCP/IP协议栈

    目录 1.主机到网络层协议:以太网协议 2.IP协议 3.网际控制报文协议(ICMP) 4.传输控制协议(TCP) 5.用户数据报文协议(UDP) 6.流控制传输协议(SCTP) 7.地址解析协议(A ...

随机推荐

  1. Lowest Common Ancestor of a Binary Search Tree -- LeetCode

    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...

  2. db2字符串截取方法及常用函数

    select substr(index_code, 1, locate('-', index_code)-1) from report_data substr(str,m,n)表示从str中的m个字符 ...

  3. 使用gtest自动化测试并给出性能测试结果(windows 版本,版本平台也可以使用,但并没有做完整的测试)

    /************************************************************* *使用gtest自动化测试 * ********************* ...

  4. ThinkPHP中实例化对象M()和D()的区别

    ThinkPHP中实例化对象M()和D()的区别 ThinkPHP中实例化对象M()和D()的区别?ThinkPHP如何实例化对象?在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法 ...

  5. Jackson反序列化提示:Can not deserialize instance of Task out of START_ARRAY token

    解决方法: 1.没有绝对的方法,只能不断的测试和排查. 2.检查一下JSON数据和实体的字段结构是不是不一致导致的.比如JSON数据是数组,而实体字段为非数组. 参考: https://stackov ...

  6. 50个最常用的UNIX/Linux命令

    转自http://get.jobdeer.com/493.get 1. tar command examples Create a new tar archive. $ tar cvf archive ...

  7. linux的dd命令详解

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 块大小可以使用的计量表 参数注释: 1. if=文件名:输入文件名,缺省为标准输入stdin.即指定源文件.< ...

  8. quartz---任务调度小试(多任务)

    quartz---任务调度小试         背景 笔者眼下做的项目"jrkj"首页上的信息都是从redis中读取的,每小时更新一次存入redis中,那么问题来了怎么才干让系统每 ...

  9. mysql优化30条建议

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  10. 《大话操作系统——做坚实的project实践派》(3)

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG1ub3M=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...