tcp客户端连接多个服务器的问题

一片维C 2014-12-19 01:26:51
我使用winsock做tcp客户端软件,我的软件需要连接多个服务器,一个线程建立一个连接,连接同一个服务器时,用两个线程同时向该服务器发送或接收文件时,毫无问题。但是当连接不同ip的两个服务器时,软件向这两服务器发送文件时,其中一个就会卡,甚至连接会断开!怎么办,怎么处理呢?还有得救不,求帮忙,感激不尽!
...全文
269 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
一片维C 2014-12-19
  • 打赏
  • 举报
回复
开始设计时我也认为线程是独立的,对socket没啥影响,就做成这样了,也没考虑更多问题。 我用的线程都没有用到锁,也没用到会阻塞的全局变量。 另外,我也试过这两种情况: 1、把我的软件打开两次,我觉得这样应该和多进程差不多,然后分别连接不同的两个服务器,情况也差不多,总有一个会卡。 2、我也试过在线程发送数据的循环中加入睡眠,还是不能解决问题。 3、向两个不同IP的服务器以100ms或1s 的的频率发送命令时,总是只有一个能实时及时发送出去,另一个都是在缓存堆了几十条命令才一次发送,甚至断开 不知道是数据发的不够快,都阻塞在底层的缓冲区里还是线程的问题。
boylafong 2014-12-19
  • 打赏
  • 举报
回复
多个线程的时候会出现优先级的问题,我曾经也出现过两个线程起来,一个把另一个给卡住的问题。 出现连续长时间发送文件时候,还是建议用多进程
oyljerry 2014-12-19
  • 打赏
  • 举报
回复
先看线程是否有死锁等,互相影响了
阿源是少年 2014-12-19
  • 打赏
  • 举报
回复
按理每个线程的socket是独立的,不会有任何干扰的,是否你使用了全局变量或是在线程里使用了CSocket对象?
xian_wwq 2014-12-19
  • 打赏
  • 举报
回复
让客户端的功能尽可能单一,先实现所需的功能。 多线程处理不好, 可以退一步,先多进程, 不同进程连接不同的服务器。
1、本课程是一个干货课程,主要讲解如何封装服务器底层,使用Tcp/ip长连接,IDE使用vs2019 c++开发以及使用c++11的一些标准,跨平台windows和linux,服务器性能高效,单服务器压力测试上万无压力,服务器框架是经历过上线产品的验证,框架简单明了,不熟悉底层封装的人,半个小时就能完全掌握服务器框架上手写业务逻辑。2、本课程是一个底层服务器框架教程,主要是教会学员在windows或linux下如何封装一个高效的,避免踩坑的商业级框架,服务器底层使用初始化即开辟内存的技术,使用内存池,服务器运行期间内存不会溢出,非常稳定,同时服务器使用自定义哈希hashContainer,在处理新的连接,新的数据,新的封包,以及解包,发包,粘包的过程,哈希容器性能非常高效,增、删、查、改永远不会随着连接人数的上升而降低性能,增、删、查、改的复杂度永远都是恒定的O(1)。3、服务器底层封装没有使用任何第三方网络库以及任何第三方插件,自由度非常的高,出了任何BUG,你都有办法去修改,查找问题也非常方便,在windows下使用iocp,linux下使用epoll.4、讲解c++纯客户端,主要用于服务器之间通信,也就是说你想搭建多层结构的服务器服务器服务器之间使用socket通信。还可以使用c++客户端做压力测试,开辟多线程连接服务器,教程提供了压力测试,学员可以自己做压力测试服务器性能。5、赠送ue4和unity3d通信底层框架以及多人交互demo,登录,注册,玩家离开,同步主要是教会学员服务器客户端如何交互。6、赠送c++连接mysql数据库框架demo,登录,注册,玩家离开数据持久化.7、服务器教程使用自定义通信协议,同时也支持protobuf,选择权在开发者自己手里,想用什么协议都可以,自由度高。8、服务器教程使用手动敲代码逐句讲解的方式开展教学课程。非喜勿喷,谢谢大家。9、服务器教程提供源码,大家可以在平台提供的地址下载或者联系我,服务器使用c++11部分标准,std::thread,条件变量,线程锁,智能指针等,需要学员具备一定c++知识,购买前请慎重考虑。

18,356

社区成员

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

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