20160530

1.使用统一的寻址方式的目的:

为了区分程序所使用的网络协议

2.寻址的目的:

为了准确定位通讯双方

eg:在TCP/IP协议通信中,用户使用IP地址和端口号确定通信双方,而在其他协议中不一定也使用该方式确定通信双方

Ps:因为套接字需要在各种网络协议中使用,所以为了区分程序所使用的网络协议,必须使用统一的寻址方式

3.windows网络编程中,Winsock(即windows上封装的socket API),可以使用TCP/IP地址家族中统一的套接字地址结构解决TCP/IP寻址可能出现的问题

3.1TCP/IP地址家族中统一的套接字地址结构:

struct sockaddr_in

{

  short                          sin_family;//--指定地址家族(即地址格式)

  unsigned short            sin_port;  //--端口号

  struct in_addr             sin_addr;//--IP地址,表示32位的IP地址结构

  char                           sin_zero[8];//--为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节,需要指定为0

};

Ps:sockaddr是TCP/IP地址家族中第一个版本的套接字地址结构;sockaddr_in新版本的TCP/IP地址家族中统一的套接字地址结构

3.2in_addr结构体的定义

struct in_addr

{

  union

  {

    struct

    {

      unsigned char s_b1, s_b2, s_b3, s_b4;

    } S_un_b;                //--用4个u_char字符描述IP地址

    

    

    struct

    {

      unsigned short s_w1, s_w2;

    } S_un_b;                //--用4个u_char字符描述IP地址

    unsigned long S_addr;                           //--用1个u_long类型描述IP地址

  } S_un;

};

Ps:通常情况下,在网络编程中使用一个u_long类型的字符进行描述IP地址即可

eg:使用IP地址结构in_addr进行描述IP地址"218.63.45.5"

sockaddr_in addr;

//--因为结构成员S_addr为网络字节顺序,所以需要调用inet_addr("218.63.45.5")将字符串"218.63.45.5"转化为网络字节顺序排列的IP地址

addr.in_addr.S_un.S_addr = inet_addr("218.63.45.5");

4.字节顺序

4.1在socket编程中,传输数据的排列顺序的主要方式:

网络字节顺序和主机字节顺序

4.2数据通过网络方式传输时,需要将数据转化为网络顺序的原因:

避免数据在传输过程中被破坏

4.3如果将网络数据储存到本地计算机,需要转化为主机字节顺序排列

4.4从数据存储来说,网络字节顺序首先存储的是数据重要的字节;而主机字节顺序首先存储的是不重要的字节顺序

5.实现线程同步

5.1线程同步的概念:

指同一个进程中多个线程相互协调工作达到一致性;避免出现同时读取和修改共享数据,导致程序异常退出

5.2实现线程同步的方法

5.2.1临界区对象

5.2.1.1临界区对象的概念:

临界区对象是指当用户使用某个线程访问共享资源时,必须使代码段独享该资源,不允许其他线程访问该资源;待该代码访问完资源后,其他程序才能对该资源进行访问

5.2.1.2临界区的使用场景:

同步代码段,即当一个线程使用一个代码段时,其他线程不可以使用该代码段;

圈定同步代码段的方法:CCriticalSection temp;   temp.Lock();.....temp.Unlock();

Ps: temp.Lock()和temp.Unlock()之间的代码为同步代码段

5.3临界区,互斥量,事件和信号量的比较

                  类名             模式          效率        适用场景

 临界区            CCriticalSection            用户模式          高      仅在同一进程的多线程使用

 

 互斥量              CMutex          内核模式          低        线程间或进程间使用

 事件               CEvent          内核模式          低        一个线程等待另一个线程完成某任务时

 信号量              CSemaphore       内核模式          低        适用于允许特定个数的线程执行某任务

6.进程间通信

6.1进程通信的概念:

进程通信是指在系统中2个或2个以上的进程间通过第三方进行数据共享。

6.2进行网络通信的方法:

6.2.1使用套接字进行网络通信;

6.2.2使用进程间的通信方式实现网络通信。

6.3进程间通信的方式:

6.3.1邮槽

6.3.1.1邮槽概念:

邮槽是windows系统提供的一种单向通信机制。即进程中的一方只能写入或读取数据,而另一方则只能读取或写入数据。通过邮槽,可以实现一对多或跨网络的进程间的通信

6.3.1.2邮槽的不足

邮槽能传输的数据非常小,大约400k左右。如果用户的数据过大,可能会导致邮槽不能正常工作

6.3.2命名管道

命名管道,是一种不但能在同一机器上实现2个进程间的通信,还能在网络中不同机器上的2个进程间进行通信的机制

与邮槽不同,命名管道传输数据是采取基于连接且可靠的传输方式,只能进行一对一进行传输

6.3.3匿名管道

时间: 2024-10-08 15:14:59

20160530的相关文章

2016-05-30 函数与变量 作用域

1. 如何访问函数内的局部变量 <script> //获取函数内部变量的两种方法 function fn1(){ var a='100000美金'; } alert(a);//报错 a isNot undefine; //解决方法1: 通过把局部变量赋值给全局变量 var str=''; function fn1(){ var a='100000美金'; str=a; } fn1();//必须先调用函数,否则里面赋值不会自动执行 alert(str);//'100000美金' //解决方式2

2016-05-30 checkbox取反 两种方式

<script> //第一种方式:利用自身的属性设置取反 window.onload=function(){ var oInputs=document.getElementsByTagName("input"); oInputs[0].onclick=function(){ for(var i=1;i<oInputs.length;i++){ oInputs[i].checked=!oInputs[i].checked; } } } //第二种方式 设置取反 wind

2016-05-30 定时器

1. <body> <input id="btn" type="button" value="按钮"> <div id="div"></div> <script> var btn= document.getElementById('btn'); var odiv=document.getElementById("div"); //var timer

[2016-05-30]OMG美语笔记-What is the longest wait you have ever experience at restaurant?

坚持~坚持~坚持~! Hot long is the wait? 要等多久? Hello!Mario Pizza! 你好,Mario披萨 Hi,How long is the wait for a dinner party of four rifht now? 你好,我们有四个人,要等多久? Right now there is a very long wait.I'm not sure if I can reserve a table for you. 现在要等的时间比较长.我估计不能帮您定位

教你成为全栈工程师

教你成为全栈工程师(Full Stack Developer) 〇-什么是全栈工程师(2016-04-04) 教你成为全栈工程师(Full Stack Developer) 一-各显神通总结八大类编程语言的区别(2016-04-06) 教你成为全栈工程师(Full Stack Developer) 二-半小时学会网站开发(2016-04-08) 教你成为全栈工程师(Full Stack Developer) 三-网站后端服务器那些事(2016-04-10) 教你成为全栈工程师(Full Stac

bzoj2333[SCOI2011]棘手的操作

bzoj2333[SCOI2011]棘手的操作 题意: 有N个节点,M个操作:连接两个节点.单个节点的权值增加v.节点所在的连通块的所有节点的权值增加v.所有节点的权值增加v.询问节点当前的权值.询问节点所在的连通块中权值最大的节点的权值.询问所有节点中权值最大的节点的权值.N,M≤300000 题解: 可并堆,虽然听说配对堆非常快,但教程太少了不会写,所以去学了斜堆,比较好写.斜堆实际上是一棵二叉树,核心是合并操作,这是一个递归过程,有点像treap的删除操作.斜堆保证复杂度的方法是每次递归合

机器学习精简入门教程

机器学习教程 一-不懂这些线性代数知识 别说你是搞机器学习的(2016-04-01) 机器学习教程 二-安装octave绘制3D函数图像(2016-04-30) 机器学习教程 三-用scikit-learn求解一元线性回归问题(2016-05-30) 机器学习教程 四-用scikit-learn求解多元线性回归问题(2016-05-30) 机器学习教程 五-用matplotlib绘制精美的图表(2016-05-31) 机器学习教程 六-用scikit-learn求解多项式回归问题(2016-06

AutoLayout的那些事儿

转自:http://www.cocoachina.com/ios/20160530/16522.html 本文投稿文章,作者:MangoMade(简书) AutoLayout非常强大也非常易用,可读性也很强,加上各种第三方AutoLayout库,让你布起局来犹如绷掉链子的狗!根本停不下来!以前的 label.frame.origin.y + label.frame.size.height + 10 如今只用: button.snp_makeConstraints{     $0.top.equa

表格布局----基于bootstrap样式 布局

在实际开发中,我们通过菜鸟教程复制的表格往往不能满足我们的开发需求,样式很难看,而且不能自适应,尤其是需要到处Excel的样式,感觉非常糟糕,这次我就写了一个表单,不足之处,希望大神们多多指教: 代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>查询详情</title> 5 <meta name="keywords" content=""/>