当前位置:  技术问答>linux和unix

客户端---服务器模式通讯程序的问题

    来源: 互联网  发布时间:2016-05-15

    本文导语:  客户端---服务器模式通讯程序,客户端fork多个子进程,每个子进程都用一个socket 作connect请求连接同一个远端服务器,(相当于在一台机子上用多个子进程模拟了多个客户端),在这个socket上发送消息到服务器,然后...

客户端---服务器模式通讯程序,客户端fork多个子进程,每个子进程都用一个socket 作connect请求连接同一个远端服务器,(相当于在一台机子上用多个子进程模拟了多个客户端),在这个socket上发送消息到服务器,然后在recv函数等待recv服务器发回的应答,
如下程序流程结构:
for (;;)//不断的产生子进程
{
  if (0 == fork())
  {
   //每个子进程里用sock_Client连接服务器
    sock_Client=socket(...);
    。。。。。
    connect( sock_Client,...);
    send( sock_Client,。。。);//先发送数据到服务器
     recv( sock_Client,。。。。);//阻塞在recv,等待服务器返回数据
    .....
  }

}

问题1. 子进程没有recv到应答就阻塞,那么要判断超时怎样做?子进程总不能无限时等待应答,
问题2 如不做额外措施,能否保证每个子进程收到属于自己的应答,不会误收服务器发到别的子进程的消息?要知道服务端收到的可是来自于同一ip地址的消息,而且从代码上每个子进程用的是同名sock_Client作接收消息

我自己对第一个问题的回答:每个子进程里用select函数实现判断超时
fd_set rdfds; /* 先申明一个 fd_set 集合来保存我们要检测的 socket句柄 */
struct timeval tv; /* 申明一个时间变量来保存时间 */
int ret; /* 保存返回值 */
FD_ZERO(&rdfds); /* 用select函数之前先把集合清零 */
FD_SET(sock_Client, &rdfds); /* 把要检测的句柄socket加入到集合里 */
tv.tv_sec = 1;
tv.tv_usec = 500; /* 设置select等待的最大时间为1秒加500毫秒 */
ret = select(sock_Client + 1, &rdfds, NULL, NULL, &tv); /* 检测我们上面设置到集合rdfds里的句柄是否有可读信息 */
if(ret 

    
 
 

您可能感兴趣的文章:

  • 自己实现linux下的ftp客户端,先用port命令后用append命令,报告错误425请问是哪里错了?,应该把模式置为pasv嘛??
  • epoll LT模式 如何检测客户端关闭
  • 求助socket编程问题:C/S模式.客户端调用Winsock函数connect()的时候,返回错误码是10065(主机路由不可达).
  • 关于tcp中客户端和服务端通信模式的请教
  • 使用TCP,在客户端怎么知道建立好的连接已经断开?怎么用非阻塞模式,以及怎么知道socket已经收到数据并立即将数据读出?
  • java命名空间javax.print类docflavor的类成员方法:客户端格式化打印数据定义及介绍
  • 客户端程序与容器打交道时客户端用什么程序编写?比如银行添单。
  • php实现socket实现客户端和服务端数据通信源代码
  • 在Linux下开发手机客户端或Pc客户端交互的服务器,需要学哪些知识?
  • windows 7下打开或者关闭telnet客户端/服务端命令方法操作步骤
  • linux端是服务器,客户端连接后,有时并不知道客户端断开,怎么侦测?
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 已和客户端连接建立的socket在客户端CTRL-C后怎么在服务器端捕捉这个错误?
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • 对于用客户端上网的用户(客户端不支持linux)如何在linux下上网?
  • 请问:我发现send函数会使客户端退出, 这怎么办啊,怎样让它不使客户端退出啊,这样我就能重新连上了啊?
  • 客户端访问的时候,怎么样取得客户的IP地址?
  • linux 能ping通客户端ip,但ping不通客户端的域名。
  • socket编程,服务器会用bind()绑定端口,而客户端不用绑定端口就可以调用connect()。那么客户端的端口时系统自己分配的么?是何时绑定的?
  • 服务器端关闭,客户端select 会一直可读, 读的长度是-1,怎么在不关闭客户端socket下,清除可读
  • 关于B/S结构的客户端打印的问题,求教各位 各位大虾,我用servlet和jsp作了一套b/s的系统,现在客户端需要打印,怎样才能实现?帮帮忙啊,小弟再此先谢过了!
  • 求救:j2ee的构架下,可以作为一个客户端不断的往一用vc做的应用程序客户端发数据吗?
  • 请问tcp 客户服务器模型(C/S模型)客户端两个send如果发送间隔太短,服务器端为什么会认为受到的只是一个包
  • socket编程中客户端绑定端口的问题,请兄弟们指点一下
  • jsp如何实现往客户端写数据文件
  • 可以在客户端存储文件吗?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • IMAP 邮件客户端 Trojitá
  • 点对点文件分享客户端 PeerProject
  • 远程的 Shell 客户端 Rlogin
  • 版本控制客户端 CrossVC
  • XMPP 客户端 Profanity
  • 即时聊天客户端软件 kopote
  • Jabber/XMPP 客户端 jj
  • POP3客户端库 libspopc
  • IRC聊天客户端 Quassel
  • MUD客户端 TinTin++
  • 网络电视客户端 GMLive
  • 远程桌面客户端 rdesktop
  • 浙ICP备11055608号-3 iis7站长之家
  • 基于Web的Jabber™客户端 JWChat
  • Applet 是在服务器端执行还是在客户端执行??
  • 客户端——服务端数据传送的几个困惑!
  • Linux 代理 一个客户端来就创建一个连接
  • fedora 校园客户端认证问题
  • 高性能 HBase 客户端 Asynchronous HBase
  • Java的CVS客户端 Gruntspud


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3