关闭

一起talk C栗子吧(第一百六十回:C语言实例--套接字通信模型一)

标签: 套接字通信模型通信模型迭代模型并发模型
1287人阅读 评论(0) 收藏 举报
分类:

各位看官们,大家好,上一回中咱们说的是基于AF_INET域数据报套接字通信的例子,这一回咱们说的例子是:套接字通信模型 。闲话休提,言归正转。让我们一起talk C栗子吧!


看官们,我们在前面章回中介绍的内容中提到过通信的次数,当时只是说可以自己设置通信的次数,并没有做详细的介绍,今天我们一起来看看如何设置通信的次数,以及与它的扩展:通信模型。

迭代通信模型

看官们,通信次数的控制主要体现在服务器端,下面是核心代码:
流套接字通信

    while(index++ < 2)
    {
        client_fd = accept(server_fd,NULL,NULL);

        // read data by socket
        res = read(client_fd,buf,BUF_SIZE);

    // close socket
        res = close(client_fd);
    }

数据报套接字通信

    while(index++ < 2)
    {
        res = recvfrom(server_fd,buf,BUF_SIZE,0,(struct sockaddr *)&client_address,&addr_len);
    }

从上面的代码中,我们可以看到while循环中的(index<2)限制了通信的次数为为,如果我们写成死循环:while(1);那么就是无限次的通信。说完的通信次数, 我们对它进行扩展,也就是我们今天要介绍的主题:通信模型。

大家可以看到,通信过程中对数据的操作是在while循环中进行的,只有当前通信过程中的数据被操作完成后才能进入下一次通信过程中。从服务器的角度看,服务器每次只能和一个客户端进行通信。从客户端的角度看,只有一个客户端能与服务器通信,其它的客户端需要等待当前客户端完成通信后才能与服务器端进行通信。也就是说,多个客户端是轮流与服务器端进行通信的,我们给这种通信方式起了一个名字叫作:迭代通信模型。

并发通信模型

接下来我们介绍另外一种套接字通信模型。首先,我们修改一下核心代码,如下所示:
流套接字通信

    //线程执行函数
    void *thread_func(void *param)
    {   
        // read data by socket
        res = read(client_fd,buf,BUF_SIZE);

        // close socket
        res = close(client_fd);
    }
    while(1)
    {
        client_fd = accept(server_fd,NULL,NULL);
        res = pthread_create(&thread_value,NULL,thread_func,(void *)param);
    }

数据报套接字通信

    //线程执行函数
    void *thread_func(void *param)
    {
        res = recvfrom(server_fd,buf,BUF_SIZE,0,(struct sockaddr *)&client_address,&addr_len);
    }
    while(1)
    {
          res = pthread_create(&thread_value,NULL,thread_func,(void *)param);
    }

从上面的代码中,我们可以看到,我们引入了线程,并且把通信的次数设置为无限次,当然了,写成像迭代模型中一样的两次通信也是可以的。我们重点看一下通信过程中的变化。

通信过程中对数据的操作是在线程函数中进行的,在while循环中主要是接受客户端发来的连接请求,并且创建新的线程,创建完一个新的线程后,就进行下一次循环中,通信过程中对数据的操作则由线程调用它的线程函数来完成。此时,如果还有客户端发来连接请求,服务器就会再创建一个新线程。

从服务器的角度看,服务器可以和多个客户端进行通信。从客户端的角度看,多个客户端可以同时与服务器通信,它们不需要等待其它的客户端通信完成通信后才能与服务器端进行通信。也就是说,同一时刻,多个客户端可以与服务器端同时进行通信。我们给这种通信方式起了一个名字叫作:并发通信模型

看官们,我们就不写详细的代码了,大家可以在我们前面“四道佳肴”中的代码上进行修改,难度不大,相信大家可以完成。

各位看官,关于套接字通信模型的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


0
0
查看评论

一起talk C栗子吧(第三十五回:C语言实例--测试程序运行时间)

各位看官们,大家好,上一回中咱们说的是巧用溢出计算最值的例子,这一回咱们说的例子是:测试程序 运行时间。闲话休提,言归正转。让我们一起talk C栗子吧! 看官们,在编写程序的时候,可能需要计算程序运行的时间。通过计算时间,可以查看程序的性能。其实 我们在第三十一回中对各种常用排序算法总结时...
  • talk_8
  • talk_8
  • 2015-08-13 20:49
  • 780

一起talk C栗子吧(第一百零七回:C语言实例--线程概述)

各位看官们,大家好,上一回中咱们说的是生产者与消费者问题的例子,这一回咱们说的例子是:线程概述。闲话休提,言归正转。让我们一起talk C栗子吧! 看官们
  • talk_8
  • talk_8
  • 2016-01-19 22:31
  • 1197

一起talk C栗子吧(第一百三十回:C语言实例--C程序内存布局二)

各位看官们,大家好,上一回中咱们说的是C程序内存布局的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起talk C栗子吧!
  • talk_8
  • talk_8
  • 2016-03-27 18:49
  • 1059

一起talk C栗子吧(第一百二十回:C语言实例--线程属性)

各位看官们,大家好,上一回中咱们说的是线程死锁的例子,这一回咱们说的例子是:线程属性。闲话休提,言归正转。让我们一起talk C栗子吧!
  • talk_8
  • talk_8
  • 2016-02-04 20:57
  • 1225

一起talk C栗子吧(第一百一十回:C语言实例--线程标识符)

各位看官们,大家好,上一回中咱们说的是线程创建与结束的例子,这一回咱们说的例子是:线程标识符。闲话休提,言归正转。让我们一起talk C栗子吧!
  • talk_8
  • talk_8
  • 2016-01-24 18:33
  • 2644

一起talk C栗子吧(第一百六十一回:C语言实例--套接字通信模型二)

各位看官们,大家好,上一回中咱们说的是套接字通信模型的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起talk C栗子吧!
  • talk_8
  • talk_8
  • 2016-05-31 22:55
  • 3678

一起talk C栗子吧(第八十回:C语言实例--进程互斥)

各位看官们,大家好,上一回中咱们说的是父进程与子进程的例子,这一回咱们说的例子是:进程互斥。闲话休提,言归正转。让我们一起talk C栗子吧!
  • talk_8
  • talk_8
  • 2015-12-22 22:36
  • 1743

一起talk C栗子吧(第十九回:C语言实例--位操作)

各位看官们,大家好,上一回中咱们说的是输出十六进制的例子,这一回咱们说的例子是:位操作。闲话 休提,言归正转。让我们一起talk C栗子吧! 看官们,位操作有五种,与、或、非、异或、移位。接下来咱们分别介绍这些操作。为了方便说明,我们 先统一做一下说明,位操作的对象是比特位。假如...
  • talk_8
  • talk_8
  • 2015-07-18 13:55
  • 1370

一起talk C栗子吧(第二十五回:C语言实例--二分查找)

各位看官们,大家好,上一回中咱们说的是顺序查找的例子,这一回咱们说的例子是:二分查找。闲话休 提,言归正转。让我们一起talk C栗子吧! 看官们,我们在上一回中说了查找的相关内容,并且介绍了一种查找方法:顺序查找。大家还记得吗?台 下有看官说:记得呢。我刚想表扬一下这位看官,但是话还没有出...
  • talk_8
  • talk_8
  • 2015-07-27 20:04
  • 759

一起talk C栗子吧(第二十四回:C语言实例--顺序查找)

各位看官们,大家好,上一回中咱们说的是与队列相关的例子,这一回咱们说的例子是:顺序查找。闲话 休提,言归正转。让我们一起talk C栗子吧! 看官们,在编写程序中,我们经常需要查找我们想要元素。就好比你想要在互联网中查找什么东西时,肯 定会使用百度或者google去搜索。 查找是最常用使...
  • talk_8
  • talk_8
  • 2015-07-26 10:25
  • 876
    个人资料
    • 访问:493255次
    • 积分:8752
    • 等级:
    • 排名:第2627名
    • 原创:380篇
    • 转载:0篇
    • 译文:0篇
    • 评论:134条
    博客专栏
    文章分类
    最新评论