sever用一个socket能监视本机的多个指定端口吗?

woodyk 2007-06-08 05:45:18
sever用一个socket能监视本机的多个指定端口吗?(如6001,6005,6007,6050......)
如果能,是如何监视的?
如果不能,该如何实现监视本机的多个指定端口的功能呢?

请各位给个主意,谢谢!!
...全文
805 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
woodyk 2007-06-21
  • 打赏
  • 举报
回复
先结贴了,我消化一下,有问题再重新开贴请教各位大侠。
谢谢!!
吴双1983 2007-06-19
  • 打赏
  • 举报
回复
应该用多线程来监听哟。这样的话多端口也很容易处理。
lwykj 2007-06-19
  • 打赏
  • 举报
回复
raw socket 可以吧
woodyk 2007-06-19
  • 打赏
  • 举报
回复
我用多线程做了一个程序,但是感觉监听的端口多到一定程度就有点让人......

所以想寻求一个更好的方法:)
僵哥 2007-06-18
  • 打赏
  • 举报
回复
其实在这里面IOCP大致可以看做是一个处理同样功能的线程池就行。另外那么多端口建议建立端口池进行管理,然后定期扫描状态,对废弃的端口进行资源释放。另外如此宽端口范围,就光发起AcceptEx也需要相当的内存。所以还要考虑使用内存池进行管理。
僵哥 2007-06-18
  • 打赏
  • 举报
回复
真的不大想再用API去写这东西(不过我也不会MFC),最近只是用Delphi做了一个简单ECHO。感觉还行,实现楼主所说的这个功能没有任何问题,首先,把IOCP做到一个类当中,其实就只是创建一个IOCP句柄,另外就是一个Socket Server类,如果多个端口的处理相同,则直接在Socket Server当中创建多个Socket并且绑定监听,然后往每个Socket发送至少一个AcceptEx,把所有这些Socket与同一个IOCP Handle相关联,然后所于该IOCP队列当中的线程都可以针对在这些端口当中任何一个最近到来的请求做出响应,只是在Accept之后,记得仍然在该Socket当中发起一个新的AcceptEx省得漏过。如此就跟一个端口没有两样了。
woodyk 2007-06-18
  • 打赏
  • 举报
回复
楼上大哥,小弟绝对地合法公民,请指点一二.最好用适当代码说明,谢谢!
iceheart 2007-06-18
  • 打赏
  • 举报
回复
very easy! 不过你是干嘛用的?不是正当用途就不帮
WizardK 2007-06-18
  • 打赏
  • 举报
回复
可以做到,只要不是阻塞LISTEN就可以(CancelBlockingCall),一个端口一个端口的监听,监听到了就创建线程去收发数据。

但是这样监听的话,在端口很多的情况下没什么实用价值。
zdleek 2007-06-18
  • 打赏
  • 举报
回复
如果楼主真要监听100个端口,可以考虑分组端口,多个程序监听
woodyk 2007-06-18
  • 打赏
  • 举报
回复
我用socket监听到具体消息后(如发送接收消息),转到相应的处理函数,但我要同时监听很多端口,达到哪个端口有消息来就先处理哪个的目的.
chenliankun 2007-06-17
  • 打赏
  • 举报
回复
理解一点,所谓socket只是一段内存,它把从网卡接收的数据交给不同的应用程序处理而已。端口用来区别这些应用程序。一个socket只能绑定一个端口,就是为了区别不同的应用程序或线程。

你的目的究竟是“监听”还是“拦截”?

如果程序是为了处理网卡数据,监听1000个端口真的要考虑程序是不是有问题。
如果程序是为了记录网卡数据,并不处理,使用raw socket就可以了。
如果程序是为了过滤网卡数据,就需要在数据交给TCP前进行处理,需要开发驱动程序来实现。

僵哥 2007-06-15
  • 打赏
  • 举报
回复
如果要1000个SOCKET,就要怀疑你程序是不是有问题了!
================================
使用1k个Socket并不等于就低效,所以也不能那么绝对地说就有问题。为了扩大拦截的范围,开1000个不为过。
smartwind 2007-06-15
  • 打赏
  • 举报
回复
一个socket只能监听一个端口
woodyk 2007-06-15
  • 打赏
  • 举报
回复
大侠们,不要"空口无凭"啊!!!!!!!!
要不给个select的例子先!
说IOCP好,给个例子证明!!!
谢谢!!
chenliankun 2007-06-14
  • 打赏
  • 举报
回复
如果要1000个SOCKET,就要怀疑你程序是不是有问题了!
僵哥 2007-06-14
  • 打赏
  • 举报
回复
比较建议的是采用IOCP来管理,而不是select.
woodyk 2007-06-14
  • 打赏
  • 举报
回复
谁能告诉我怎么用select管理若干个socket先>?
谢谢!
pSK_LB 2007-06-12
  • 打赏
  • 举报
回复
就不能用一个socket去一个一个地查询端口吗?
僵哥 2007-06-12
  • 打赏
  • 举报
回复
监听一千个端口有点可怕,不过一个SOCKET只能监听一个端口,按理解,应该这一千个端口处理的是同样的一个东西,所以基于上可以考虑使用绑定到同一个IOCP队列当中,这样子的话就只是有限的少量线程在服务和处理,可以在一定的程序上提升效率。但是一千个端口,仅仅就象撒鱼网一样,扩大了范围,但是你的带宽以及服务器的其它资源限定了,你的服务能力。
加载更多回复(8)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧