码迷,mamicode.com
首页 > 其他好文 > 详细

20160530

时间:2016-05-30 22:52:21      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

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匿名管道

20160530

标签:

原文地址:http://www.cnblogs.com/heavysnow/p/5543957.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!