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

多客户端Socket的select问题,高手帮忙!

    来源: 互联网  发布时间:2015-12-22

    本文导语:  一个服务器和多个客户端建立连接,也就是将accept()返回的Socket保存在一个数组中,然后对这多个连接调用select。判断某个客户端送来数据,如果有则读出。 我的问题: 1.是否可以多次调用FD_SET,将accept()返回的多...

一个服务器和多个客户端建立连接,也就是将accept()返回的Socket保存在一个数组中,然后对这多个连接调用select。判断某个客户端送来数据,如果有则读出。
我的问题:
1.是否可以多次调用FD_SET,将accept()返回的多个Socket放入集合。
2.如果可以,当某个Socket可读时,怎样根据select 返回的结果判断是哪个socket 可读?
请高手给个算法,谢谢。

|
1) FD_SET可以多此调用阿,有一个fd,就需要调用一次
2) 用FD_ISSET, 这个宏来确定是遍历每个fd,确认是否这个fd可以读写了,直接知道哪些fd可以读是不能知道的,只能遍历来获得

|
*----------------------源代码开始--------------------------------------------*/ 
static int forward_port; 

#undef max 
#define max(x,y) ((x) > (y) ? (x) : (y)) 
static int listen_socket (int listen_port) { 
    struct sockaddr_in a; 
    int s; 
    int yes; 
    if ((s = socket (AF_INET, SOCK_STREAM, 0))  0) { 
            FD_SET (fd2, &wr); 
            nfds = max (nfds, fd2); 
        } 

        /*把有异常数据的socket两个一起放入select的异常句柄列表里*/ 
        if (fd1 > 0) { 
            FD_SET (fd1, &er); 
            nfds = max (nfds, fd1); 
        } 
        if (fd2 > 0) { 
            FD_SET (fd2, &er); 
            nfds = max (nfds, fd2); 
        } 

        /*开始select*/ 
        r = select (nfds + 1, &rd, &wr, &er, NULL); 

        if (r == -1 && errno == EINTR) continue; 
        if (r 

    
 
 

您可能感兴趣的文章:

  • 请大侠们帮忙实现FTP客户端!!
  • 关于B/S结构的客户端打印的问题,求教各位 各位大虾,我用servlet和jsp作了一套b/s的系统,现在客户端需要打印,怎样才能实现?帮帮忙啊,小弟再此先谢过了!
  • linux 验证客户端登录 socket得不到数据!! 急求高手帮忙!!!
  • 嵌入式linux下,TCP的客户端无法连接到服务器(硬件没问题),请帮忙看看!谢谢
  • 想实现一个程序 UDP例程的。 实现2个客户端通信, 而不是客户端于服务器的通信,大家帮忙想下怎么写啊。下面是我写的客户端和服务器的通信。 服务器作为中转数据
  • 测试服务器并发性能的客户端程序阻塞在 recv 函数处,大家帮忙看看什么原因?
  • (高分)谁写过linux下的ftp客户端(访问linux服务器),请帮帮忙!有代码也行!
  • 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下,清除可读
  • 求救:j2ee的构架下,可以作为一个客户端不断的往一用vc做的应用程序客户端发数据吗?
  • 请问tcp 客户服务器模型(C/S模型)客户端两个send如果发送间隔太短,服务器端为什么会认为受到的只是一个包
  • socket编程中客户端绑定端口的问题,请兄弟们指点一下
  • jsp如何实现往客户端写数据文件
  • 可以在客户端存储文件吗?
  • SSH客户端 MindTerm
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












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


  • 站内导航:


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

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

    浙ICP备11055608号-3