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

socket编程多端口问题?

    来源: 互联网  发布时间:2016-04-06

    本文导语:  我想请教一下如何在socket编程中如何采用select检测两个端口的描述符,并对描述符分别调用不同的处理函数。 我目前想到的方法是建立两个socket,分别bind和listen,并加入select描述符集中,分别检测,并将两个描述符的...

我想请教一下如何在socket编程中如何采用select检测两个端口的描述符,并对描述符分别调用不同的处理函数。
我目前想到的方法是建立两个socket,分别bind和listen,并加入select描述符集中,分别检测,并将两个描述符的连接请求分别存入两个数组,然后分别对数组的描述符循环处理。流程如下:
sock_1 = socket(..);
sock_2 = socket(..);

bind(sock_1,..);
bind(sock_2,..);

listen( sock_1,..);
listen( sock_2,..);

FD_SET( sock_1, &readfd);
FD_SET( sock_2, &readfd);

while( 1 ) {
    select( maxfd+1, &readfd,....);

    if( FD_ISET( sock_1, &readfd ) ) {
         newsock = accept(..)
         cliA_sock[ii] = newsock;
         FD_SET( cliA_sock[ii], &readfd )
    }
     if( FD_ISET( sock_2, &readfd ) ) {
         newsock = accept(..)
         cliB_sock[ii] = newsock;
         FD_SET( cliB_sock[ii], &readfd )
    }
  
    for(...){
        处理cliA_sock[ii]中所有描述符
    }

    for(...){
        处理cliB_sock[ii]中所有描述符
    }
}

但是这种流程有一个问题,就是收集描述符的两个数组,所收集描述符的个数很难控制,因为select描述符集合只能存放1024位,如果sock_1一下子收集了1000个述符并用FD_SET放入描述符集合中,那sock_2无论收集多少,也只能将24个FD_SET到描述符集合中。    
请教一种好的流程,能解决不同的端口发来的请求进行不同的处理,重要是做好对两种描述符的管理,希望还是用select,谢谢!

|
是我糊涂,呵呵。
用结构,类似
{
   int fd;
   int type;
};
然后定义一个结构数组,动态的也行,匹配到fd后,根据type进行处理,如何?

|
select 阻塞等待到超时或者readfd中的某一个有响应,在你这里就是sock1或sock2中的任意一个有accept,这样你就不是先sock1在sock2,而是两个同时收集,共同使用。
就你的意思,是像区分来自于两个不同的地方的SOCKET,需要把两种不同的SOCKET在同一个函数或进程中实现,给你两点建议:
1、使用多进程,一个进程处理sock1,一个进程处理sock2,这样就可以分开处理了。
2、仍然用你的方法,把accept后的套接字分别记载到两个数组中,然后如果有新的请求发生,那么先获取到请求的套接字描述符s,再分别到两个数组中去查找这个描述符是属于那个数组的,从而调用不同的处理函数。
有关socket编程多端口的详细内容你可以看下《精通Unix编程与项目实践》的第17章,《并发SOCKET程序设计》部分,上面有更加详细的例子。

    
 
 

您可能感兴趣的文章:

  • Linux下的Socket通信如何断开连接的端口从而实现重复使用该端口
  • socket编程,服务器会用bind()绑定端口,而客户端不用绑定端口就可以调用connect()。那么客户端的端口时系统自己分配的么?是何时绑定的?
  • 为什么 我用socket绑定一个端口, 释放以后,短期内都没法再绑定这个端口了?
  • 请问,在linux下如何探测socket端口通不通啊?
  • 创建了2个套接字Raw socket和socket,都调用recvfrom(),一个专门捕获数据包,一个在9001端口监听UDP请求,怎么不行?
  • socket编程中客户端绑定端口的问题,请兄弟们指点一下
  • 对于socket UDP传输,一个端口只能被一个进程绑定?
  • 为什么 我用socket绑定一个端口, 释放以后,短期内都没法再绑定这个端口了? iis7站长之家
  • 看看UDP socket 端口 自动绑定的怪事?
  • 能够在端口9001上监听其他应用的UDP请求,并打印其请求的数据包内容。先不管什么格式,请问如何用socket编写。
  • 在用socket编程的时候,请问如何解除对端口的BIND
  • Linux下Socket接收超时和主机端口 如何区分
  • 关于SOCKET释放端口的问题!!!
  • 我写了SOCKET编程(需要开放哪个端口,如何设置)
  • socket程序退出后有时候端口还没有释放?请问高人如何解决啊。正确立马结帖。
  • 怎么使用socket与指定IP和端口下的服务通讯
  • 关于Socket服务端不能调起监听端口的问题
  • 虚心请教Linux Socket编程中如何根据指纹信息判断端口服务
  • C#开发之Socket网络编程TCP/IP层次模型、端口及报文等探讨
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • IOS开发之socket网络编程(基于SimpleNetworkStreams的c/s程序)
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • socket 编程时,write的写入的数据大于socket缓冲区,会有什么结果??
  • Linux下使用openssl api编程socket编程,为什么要编译啊?
  • 关于文件操作和Socket网络编程!
  • linux下socket编程问题!
  • socket编程 中的bind问题
  • socket编程--htons
  • 急!!请教关于linux socket编程的一个问题!!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux socket问题。。怎样获得已帮定特定port的一个套接字socket
  • 关于socket概念的理解问题!
  • 你是否可以回答Socket的问题?数据先后问题
  • Socket的问题
  • socket accept问题,大家指教。
  • socket客户端程序的问题
  • 关于多网口socket通信的简单问题
  • fgets用在SOCKET流上的问题
  • linux socket fd 写阻塞问题
  • linux下用socket实现多进程间通信问题?
  • 请教:多线程使用同一个socket进行数据收发会出现什么问题?
  • 请问socket方面的问题
  • 请教两个小问题:一个cgywin下使用vi的问题,另一个socket的问题
  • windows 与 linux socket 编程问题
  • 问个linux下raw socket的问题
  • Socket的问题?
  • 关于socket通讯的一个问题
  • socket read返回问题
  • 奇怪问题,关于Socket的!
  • C++ socket挂钩问题
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍


  • 站内导航:


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

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

    浙ICP备11055608号-3