最近项目涉及到 一个应用程序 和两个端口的客户端进行通信  有几个问题 一.是一个应用程序是否可以启动两个服务?    二.用一个tcp服务怎样监听两个端口和接受数据  三.是否非用多线程才能实现一个应用程序监听多个端口    很急 希望各位高手尽快给答复 谢谢了.

解决方案 »

  1.   


    "一个应用程序 和两个端口的客户端进行通信" - 能解释下什么叫"两个端口的客户端吗"?估计只有你自己能看明白.1.一个应用程序可以提供一个或以上的服务,只是看你功能是否支持.例子,ccproxy,一个程序支持了http/ftp/socks4/socks5/网关服务等
    2.方法有N多,模型也有很多,主要是"独立处理"还是"根据协议处理".
    "独立处理"是每个不同服务开一个线程去监听端口,等待客户端连后再处理.
    "根据协议处理"是所有打开的服务端口的socket都关联(例如关联到IOCP,消息驱动WSAAsyncSelect(),事件驱动WSAEventSelect()等),然后再根据不同服务的协商数据确定提供哪种服务.
    3.单线程/多线程都可以,只是看要实现的服务是否可以通过数据协议知道要提供哪种服务类型.例如要实现http/socks4/socks5服务,那么单线程也没问题,因为http/socks4/socks5的协商协议都是独立不同的,根据协商协议就能知道要提供哪种服务.
      

  2.   

    创建2个socket ,分别调用bind, listen函数后就可以监听.
      

  3.   

    我测试了 创建两个socket时  接受时只能接受到一个的  我刚开始接触网络编程 不是太明白 创建两个socket是不是 就得用多线程啊  谁有demo给个 看看 谢谢 不然不太明白
      

  4.   

    我的项目是这样的 假设有两个端口5001  5002   一个服务器端 分别要和 5001  5002端口的通信 且没个端口还可能有多个客户端  我现在不知道怎么处理   一个服务器 要是创建两个socket 不知道是不是非要用多线程 不用多线程 接收的时候不知道有问题没  要是用多线程 我的程序里已经有 好几个线程了 控制起来可能相当麻烦 能给我点好的建议吗 谢谢了 有例子可以 给我看看吗 我现在没概念 估计看下例子能懂
      

  5.   

    创建两个socket,起两个线程监听,accept,recv/send就可以了啊
      

  6.   

    listen的时候要阻塞的,你一个线程怎么可能同时listen两个端口?一个线程同一时刻只能干一件事!无论是在listen还是在accept新连接,处理请求,都是只在干同一端口的一件事,不可能同时两个端口。accept处理完之后还会回到同一个端口继续阻塞listen
    至少2个线程。一个端口一个。如果要求处理较多用户的同时请求,则要多线程,accept后新建一个线程进行处理,主线程继续listen
      

  7.   

    我遇到和他一样的情况,具体怎么办啊?愁啊
    同样也是
    "我测试了 创建两个socket时  接受时只能接受到一个的  我刚开始接触网络编程 不是太明白 创建两个socket是不是 就得用多线程啊  谁有demo给个 看看 谢谢 不然不太明白"
      

  8.   

    不过我是UDP,也创建了两个socket,只有一个能接受
      

  9.   

    创建两个监听线程,分别accept,receive应该可以的
      

  10.   

    一个进程要监听两个端口可采用以下两种方法:
    1.创建两个线程,没别监听处理
    2.采用I/O多路复用,linux中采用select函数即可,具体用法,可以查手册