首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

来,初学者有关问题,udp服务器,来看看,感激不尽

2012-12-14 
来,菜鸟问题,udp服务器,来看看,感激不尽本帖最后由 dlfku 于 2012-10-29 20:18:53 编辑恩,刚学习网络编程,

来,菜鸟问题,udp服务器,来看看,感激不尽
本帖最后由 dlfku 于 2012-10-29 20:18:53 编辑 恩,刚学习网络编程,正在做一个windows下的udp服务器,我的想法是这样的,服务器有2个线程,一个网络线程,一个逻辑线程。网络线程专门负责接收客户端发来的数据,这些数据交给逻辑线程处理,(他们之间有个任务队列)逻辑线程处理好了,在交给网络线程,由网络线程发回给客户端。
当然,上面这些不是重点,我的问题是:网络线程中有一个(就一个)socket,就由这一个socket负责收发客户端数据(异步的收和异步的发),如果客户端有几千个,几乎同时发数据过来的话,请问网络线程这一个socket能处理(仅仅是收和发)过来么?

本来想到用一个 socket pool ,由多个socket来做这些事,每一个socket负责一个客户端,可是发现行不通,因为 如果有多个socket的话,他们要绑定至同一个端口(设置address_reuse),那么每个socket的ip肯定要不一样的,这些不一样的ip由程序来生成,这样一来,客户端就不能知道服务器这边的确切ip了,客户端也就没办法向服务器发数据了。

请问是这样吗,有做过的朋友 来给几句建议啊,深表感谢啊 
[最优解释]
你的情况不需要多线程吧,用2个线程可能反而会降低效率,直接用select或异步socket都可以。这里有UDP服务器程序,请找MsgSndSrv,DaytimeSrv:
http://download.csdn.net/detail/geoff08zhang/4571358
[其他解释]
听说可以用IOCP
[其他解释]
UDP 是数据报方式,能不能处理过来取决于你处理数据的速度,需要两个线程好一些,一个线程只管收数据,收到就放在队列中,是能处理过来的,没有什么问题。
[其他解释]
UDP是无连接的,一个套接字就可以了。
几千个客户端同时发数据:这个可以用多线程处理
[其他解释]
如果仅仅只是处理一些几乎没有阻塞的业务的话,几千个客户端是绰绰有余
[其他解释]
哥们,我也刚学,估计和你一样混乱。
我的想法是:做一个socket函数,就负责接收,来了数据直接把收到的sockaddr_in类型的客户端地址和msg数据交给一个新的线程。然后线程自己负责再发给客户端就行了。一个UDP,无连接的,随便收了。而且,就是你想公用一个端口也行,用setsockopt函数,就行。
[其他解释]
谢谢你,兄弟 这个到不是我要问的问题
我主要是想知道 如果就一个socket的话 , 能不能应付几千客户端呢?如果不行,有什么解决方案么
[其他解释]

引用:
UDP是无连接的,一个套接字就可以了。
几千个客户端同时发数据:这个可以用多线程处理


谢谢你,你觉得一个socket就可以应付几千个数据的收发了是吗?呵呵 我对这个还真没什么概念
还有 多线程 你是指在接收的时候吗?我现在是接收(发送)数据专门在一个单独的线程中
[其他解释]
引用:
哥们,我也刚学,估计和你一样混乱。
我的想法是:做一个socket函数,就负责接收,来了数据直接把收到的sockaddr_in类型的客户端地址和msg数据交给一个新的线程。然后线程自己负责再发给客户端就行了。一个UDP,无连接的,随便收了。而且,就是你想公用一个端口也行,用setsockopt函数,就行。


多谢哥们啊 我对这才接触不到一周 呵呵 不太懂。
不过按你说的 , 接收的线程只管接收,发的话交给另外线程去做 有点启发 呵呵 
不知可不可以 弄3个线程,一个接收线程,这里面一个socket专门负责接收数据 ---》然后把收到的数据交给逻辑线程处理 -----》处理后的数据 再交给第三个线程(发送线程),这里也有一个socket 专门负责发送 。
不知这个可行不 
[其他解释]
啊 还得继续多多的学习啊 

热点排行