读书人

~ TCP连接!一个客户端同时连接多个服

发布时间: 2012-05-22 18:18:54 作者: rapoo

求救~~! TCP连接!一个客户端同时连接多个服务器问题
求救~~! TCP连接!一个客户端同时连接多个服务器问题
现在在动态链接库里要做成一个TCP模块,去连接远端的TCP转485模块(服务器)。
如何同时连接,是要创建多个SOCKET吗?

高手!!你们在哪里?
出来指点一下~~!
万分感谢

[解决办法]
创建多个socket
[解决办法]
创建多个socket进行连接。
[解决办法]
多线程,一个主listen线程,多个recv线程,非阻塞模式。
如果对多线程,socket通信不熟悉,那还是用一个线程负责listen并且recv吧。阻塞。这样比较简单。
[解决办法]
这个东西我前一阵做了两个,都是作为一个动态库插件挂在主框架下工作的,被主框架触发,方法如下:

不过你的框架如何与动态库交互了,一般动态库都只暴漏一个Init接口用来向主框架注册一系列回调函数。

在以上初始化完成后,肯定注册了一个接口与主框架进行交互,称这个接口叫做on_message,也就是主框架接受到消息,回调每个插件进行处理。另外,提供一个on_create接口供主框架回调来初始化我们的插件数据结构。

我假设你做的插件是一个proxy模块,也就是将主框架的包通过socket向外转发,那么每次on_message被回调,我们的模块都要转发该包。

我假设你的若干socket是配置文件里配置的若干后端服务器转发message的,那么一个完全异步化的设计是:

on_create回调时:
1,创建插件用的数据结构与必要数据
2,根据配置文件,获得指定的工作线程数量,为每个工作线程创建Pipe和加锁队列
3,启动所有工作线程,每个工作线程epoll监听各自的pipe

on_messsage回调时:
1,RR轮询到某一个工作线程,message加入其队列,向其pipe写1字节。
2,被触发的工作线程拿到message结构体,根据其目的地址创建socket,做非阻塞connect。
3,当非阻塞conenct返回可读或者可写,并且getsockopt SO_ERROR无错时,表明连接成功,可以开始发送mesage,发送结束关闭socket即可。

如果楼主要做长连接,建议一个线程对应一个长连接socket,其他方法基本一致。

不知道楼主能否理解这么高端的东西- -。。。 本人做过http proxy,xmpp proxy,类似的一些东西,信手拈来。。


[解决办法]
TCP是一对一的。
[解决办法]
一个客户端,里面使用多个线程向一个服务器发送不同操作请求.服务器里分别有相应的线程接受操作.处理完毕在想客户端发送处理结果.就是#5说的,客户端也有rece操作.
没听过一个客户端连接多个服务器的.服务器最多一个,端口号也一个.对应的每一个客户端拨同一个端口号.不同客户端通过不同的标识加以区别(客户端的信息可以存放在数据库中).

读书人网 >C++

热点推荐