求救~~! TCP连接!一个客户端同时连接多个服务器问题

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

高手!!你们在哪里?
出来指点一下~~!
万分感谢
...全文
1175 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcqian 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
这个东西我前一阵做了两个,都是作为一个动态库插件挂在主框架下工作的,被主框架触发,方法如下:

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

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



让我理解的蛋疼
abcqian 2012-05-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
一个客户端,里面使用多个线程向一个服务器发送不同操作请求.服务器里分别有相应的线程接受操作.处理完毕在想客户端发送处理结果.就是#5说的,客户端也有rece操作.
没听过一个客户端连接多个服务器的.服务器最多一个,端口号也一个.对应的每一个客户端拨同一个端口号.不同客户端通过不同的标识加以区别(客户端的信息可以存放在数据库中).
[/Quote]

谢谢
忘世麒麟 2012-05-16
  • 打赏
  • 举报
回复
一个客户端,里面使用多个线程向一个服务器发送不同操作请求.服务器里分别有相应的线程接受操作.处理完毕在想客户端发送处理结果.就是#5说的,客户端也有rece操作.
没听过一个客户端连接多个服务器的.服务器最多一个,端口号也一个.对应的每一个客户端拨同一个端口号.不同客户端通过不同的标识加以区别(客户端的信息可以存放在数据库中).
abcqian 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
多线程,一个主listen线程,多个recv线程,非阻塞模式。
如果对多线程,socket通信不熟悉,那还是用一个线程负责listen并且recv吧。阻塞。这样比较简单。
[/Quote]

客户端可以LISTEN?
abcqian 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
创建多个socket进行连接。
[/Quote]
这个我也想到了 但是觉得很烦
我最后是使用 创建 释放 的方式实现 具体效果测试后才晓得 就是每次用到的时候将IP地址 port 传递到DLL中 我在里面创建socket 处理数据 处理完关闭socket,线程则不关闭
下次使用 如上方法
abcqian 2012-05-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
创建多个socket
[/Quote]
谢谢
mars_man 2012-05-15
  • 打赏
  • 举报
回复
TCP是一对一的。
qq120848369 2012-05-14
  • 打赏
  • 举报
回复
这个东西我前一阵做了两个,都是作为一个动态库插件挂在主框架下工作的,被主框架触发,方法如下:

不过你的框架如何与动态库交互了,一般动态库都只暴漏一个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,类似的一些东西,信手拈来。。

cobra_chen 2012-05-14
  • 打赏
  • 举报
回复
多线程,一个主listen线程,多个recv线程,非阻塞模式。
如果对多线程,socket通信不熟悉,那还是用一个线程负责listen并且recv吧。阻塞。这样比较简单。
笨笨的小猪 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
创建多个socket进行连接。
[/Quote]
好像没有别的办法了吧
W170532934 2012-05-14
  • 打赏
  • 举报
回复
创建多个socket进行连接。
ouyh12345 2012-05-14
  • 打赏
  • 举报
回复
远端的服务端是否支持转发服务?如果支持,只需要连接转发服务器
ouyh12345 2012-05-14
  • 打赏
  • 举报
回复
创建多个socket

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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