关于socket通信的问题

bj-alex 2014-08-25 12:25:01
之前在.net板块发过这样的问题,也得到了大家的积极帮助。但是后来发现不适用于大量数据的情况。由于各种原因,又得改为用C++开发,再描述下问题吧。
通信程序,通过发送消息队列A,将业务程序产生的数据,及时或定时发送到远程端口;当有外部数据进来时,接收并存入接收消息队列B。计划采用两个线程,一个负责发送数据,一个负责接收数据。接收的数据为本地业务程序的更新,命令或参数。
1,业务程序会产生大量的数据,如何保证快速有效地发送数据?
2,接收的数据如果为本地程序的更新内容,遇到数据量大时,该如何保证?
...全文
129 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
从你的描述来看,很像电力自动化领域的以太网103规约 我觉得你可以参考一下
  • 打赏
  • 举报
回复
1.网络要好一点,这是最基本的 2.还是要网络得好一点,然后优化本地数据处理函数 --------------------------------------------------------------------- 远方应为tcp server 本地应为tcp client 然后设计一个通信规约 当本地程序启动时会主动连接远方server端 当tcp连接建立后就可以双向通信了 没必要使用多线程,单线程足矣
  • 打赏
  • 举报
回复
引用 11 楼 qwangq 的回复:
[quote=引用 10 楼 dcmilan 的回复:] [quote=引用 8 楼 qwangq 的回复:] [quote=引用 7 楼 dcmilan 的回复:] [quote=引用 6 楼 qwangq 的回复:] 在数据量大的情况下,单线程是否可以处理?现在只考虑客户端的通讯程序。
你的客户端貌似是tcp server啊 这么说你的服务端是tcp client了 服务端已经写好了?[/quote] 其实,没有严格的客户端、服务端,在我这边有通信程序负责与另一边的设备通讯,两边的通信程序都需要发送数据和接收数据,一对一的,即可以看成是客户端,也可以看成是服务端。[/quote] 话是这么讲,我说的模式你看了吧,你的确可以好好参考一下 因为这个模式在电力行业已经用了十多年了,是久经考验的[/quote] 其实,我只负责本地的通信程序,可以把它看成是客户端。远端的,就当做是服务器。我画的那个流程图,就是根据具体协议来的。如果按照你说的单线程模式,在服务器下发本地软件更新时,单线程可以处理? http://bbs.csdn.net/topics/390852400?page=1#post-397957485这是我之前的帖子,有人说在接收的数据时多时少时,使用多线程,先接收,在存入队列。我觉得应该符合这个情况。[/quote] 肯定没问题啊,单线程是对cpu利用最充分的模式。多线程还有个协调的问题。不跟你讨论了,我觉得你在把简单的事情复杂化。
bj-alex 2014-08-25
  • 打赏
  • 举报
回复
引用 10 楼 dcmilan 的回复:
[quote=引用 8 楼 qwangq 的回复:] [quote=引用 7 楼 dcmilan 的回复:] [quote=引用 6 楼 qwangq 的回复:] 在数据量大的情况下,单线程是否可以处理?现在只考虑客户端的通讯程序。
你的客户端貌似是tcp server啊 这么说你的服务端是tcp client了 服务端已经写好了?[/quote] 其实,没有严格的客户端、服务端,在我这边有通信程序负责与另一边的设备通讯,两边的通信程序都需要发送数据和接收数据,一对一的,即可以看成是客户端,也可以看成是服务端。[/quote] 话是这么讲,我说的模式你看了吧,你的确可以好好参考一下 因为这个模式在电力行业已经用了十多年了,是久经考验的[/quote] 其实,我只负责本地的通信程序,可以把它看成是客户端。远端的,就当做是服务器。我画的那个流程图,就是根据具体协议来的。如果按照你说的单线程模式,在服务器下发本地软件更新时,单线程可以处理? http://bbs.csdn.net/topics/390852400?page=1#post-397957485这是我之前的帖子,有人说在接收的数据时多时少时,使用多线程,先接收,在存入队列。我觉得应该符合这个情况。
  • 打赏
  • 举报
回复
引用 8 楼 qwangq 的回复:
[quote=引用 7 楼 dcmilan 的回复:] [quote=引用 6 楼 qwangq 的回复:] 在数据量大的情况下,单线程是否可以处理?现在只考虑客户端的通讯程序。
你的客户端貌似是tcp server啊 这么说你的服务端是tcp client了 服务端已经写好了?[/quote] 其实,没有严格的客户端、服务端,在我这边有通信程序负责与另一边的设备通讯,两边的通信程序都需要发送数据和接收数据,一对一的,即可以看成是客户端,也可以看成是服务端。[/quote] 话是这么讲,我说的模式你看了吧,你的确可以好好参考一下 因为这个模式在电力行业已经用了十多年了,是久经考验的
bj-alex 2014-08-25
  • 打赏
  • 举报
回复
至少,在我这边看来,只是连接一个外部端口,然后发送和接收数据,应该还算是客户端。
bj-alex 2014-08-25
  • 打赏
  • 举报
回复
引用 7 楼 dcmilan 的回复:
[quote=引用 6 楼 qwangq 的回复:] 在数据量大的情况下,单线程是否可以处理?现在只考虑客户端的通讯程序。
你的客户端貌似是tcp server啊 这么说你的服务端是tcp client了 服务端已经写好了?[/quote] 其实,没有严格的客户端、服务端,在我这边有通信程序负责与另一边的设备通讯,两边的通信程序都需要发送数据和接收数据,一对一的,即可以看成是客户端,也可以看成是服务端。
  • 打赏
  • 举报
回复
引用 6 楼 qwangq 的回复:
在数据量大的情况下,单线程是否可以处理?现在只考虑客户端的通讯程序。
你的客户端貌似是tcp server啊 这么说你的服务端是tcp client了 服务端已经写好了?
bj-alex 2014-08-25
  • 打赏
  • 举报
回复
在数据量大的情况下,单线程是否可以处理?现在只考虑客户端的通讯程序。
bj-alex 2014-08-25
  • 打赏
  • 举报
回复
附件是我单线程设计的流程图,请高手指点。我们老大说,我这做个课程设计还行,实际应用不行。
bj-alex 2014-08-25
  • 打赏
  • 举报
回复
引用 3 楼 pcradio 的回复:
可以考虑使用http通信,如果使用TCP的话需要自己定义一个通信协议
这个通讯协议已经有了,还是用TCP通信可靠。
阿源是少年 2014-08-25
  • 打赏
  • 举报
回复
可以考虑使用http通信,如果使用TCP的话需要自己定义一个通信协议

18,356

社区成员

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

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