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

原创 2016年05月31日 05:54:01

各位看官们,大家好,上一回中咱们说的是基于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循环中主要是接受客户端发来的连接请求,并且创建新的线程,创建完一个新的线程后,就进行下一次循环中,通信过程中对数据的操作则由线程调用它的线程函数来完成。此时,如果还有客户端发来连接请求,服务器就会再创建一个新线程。

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

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

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


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

一起talk C栗子吧(第一百五十八回:C语言实例--基于AF_INET域的流套接字通信)

各位看官们,大家好,上一回中咱们说的是基于AF_UNIX域的数据报套接字通信的例子,这一回咱们说的例子是:基于AF_INET域的流套接字通信 。闲话休提,言归正转。让我们一起talk C栗子吧!
  • talk_8
  • talk_8
  • 2016-05-29 19:41
  • 2885

一起talk C栗子吧(第一百五十九回:C语言实例--基于AF_INET域的数据报套接字通信)

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

一起talk C栗子吧(第一百五十六回:C语言实例--基于AF_UNIX域的流套接字通信)

各位看官们,大家好,上一回中咱们说的获取socket通信地址的例子,这一回咱们说的例子是:基于AF_UNIX域的流套接字通信 。闲话休提,言归正转。让我们一起talk C栗子吧!
  • talk_8
  • talk_8
  • 2016-05-28 20:57
  • 3115

一起talk C栗子吧(第一百六十二回:C语言实例--套接字知识体系图)

各位看官们,大家好,上一回中咱们说的是套接字通信模型的例子,这一回咱们说的例子是:套接字知识体系图。闲话休提,言归正转。让我们一起talk C栗子吧!
  • talk_8
  • talk_8
  • 2016-06-05 20:45
  • 1989

一起talk C栗子吧(第九十回:C语言实例--使用管道进行进程间通信三)

各位看官们,大家好,上一回中咱们说的是使用管道进行进程间通信的例子,这一回咱们说的例子是:使用管道进行进程间通信,不过使用管道的方式不相同。闲话休提,言归正转。让我们一起talk C栗子吧!
  • talk_8
  • talk_8
  • 2016-01-04 22:54
  • 1356

一起talk C栗子吧(第八十五回:C语言实例--使用信号进行进程间通信二)

各位看官们,大家好,上一回中咱们说的是使用信号进行进程间通信的例子,这一回咱们接着上一回的内容,继续说该例子。闲话休提,言归正转。让我们一起talk C栗子吧!
  • talk_8
  • talk_8
  • 2015-12-29 22:29
  • 1717

一起talk C栗子吧(第九十六回:C语言实例--使用共享内存进行进程间通信二)

各位看官们,大家好,上一回中咱们说的是使用共享内存进行进程间通信的例子,这一回咱们接着上一回内容继续说使用共享内存进行进程间通信。闲话休提,言归正转。让我们一起talk C栗子吧!
  • talk_8
  • talk_8
  • 2016-01-10 22:58
  • 1460

一起talk C栗子吧(第一百四十九回:C语言实例--socket通信接口一)

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

一起talk C栗子吧(第八十六回:C语言实例--使用信号进行进程间通信三)

各位看官们,大家好,上一回中咱们说的是进程间通信的例子,这一回咱们接着上一回的内容,继续说该例子。闲话休提,言归正转。让我们一起talk C栗子吧!
  • talk_8
  • talk_8
  • 2016-01-01 20:53
  • 1301
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)