多个socket通信,这样设计行不行?是否需要用多线程?

pjie131 2006-06-16 04:21:16
1。用一个类TMyWork来记录socket和socket用到的数据结构。一个类只有一个socket。

2。所有的socket都用new建立,用的是TClientSocket类。

3。在TMyWork中,有和socket相关联的若干定时器,全部new建立,用的是TTimer,用于重新连接socket,初始化,处理接收的消息等。

new语句使这样写的,对吗?Form_Main是主窗体;
TClientSocket * Socket_Client = new TClientSocket(Form_Main);
TTimer * Timer_TcpConnect = new TTimer(Form_Main);

4。socket和定时器的接口函数在TMyWork中。

5。在TMyWork中,重写socket的connect,close,receive,error事件,重写各个定时器的ontimer函数。

6。各个socket之间不共享数据,也不传递数据,各处理各的数据,有各自的接收缓存,发送缓存。

7。TMyWork类在主窗体中另外建立,用一个链表管理。


*****************************************************************************************

问题:

1。我这里new的socket如果很多,会不会使主窗体的响应变慢。就是说,如果有100个socket,同时收到消息的时候,是不是窗体就像死了一样。

2。是否改为多线程好些?但这样一来,线程是否就太多了,因为一个TMyWork可能就需要:接收、接收处理、发送等多个线程,但这样就不需要定时器了。

3。改用多线程的话,是否有一个新的问题出现,就是一个TMyWork中,几个线程需要同步和互斥,因为接收缓存、发送缓存等在他们之间使共享的。

4。多线程会不会因为太多不能new的情况?这样的话,可能就有一个TMyWork不能建立。



最初没有考虑太多,一着急,就用了n个定时器解决了问题,感觉不太好,大家能否给点意见。
...全文
627 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pjie131 2006-07-07
  • 打赏
  • 举报
回复
无所谓分数了,结帖。。。。。。

。。。。。。

痞子酷 2006-06-20
  • 打赏
  • 举报
回复
TClientSocket:改为直接使用SOCKET API来完成。
每一个连接,启动一个线程,任务结束,线程释放结束。
使用API select 来完成读取数据和写数据。
pp616 2006-06-17
  • 打赏
  • 举报
回复
100来个连接用异步消息模式 数据处理还在消息中进行。窗口基本是死定了。

开100来个线程基本没问题。

建议楼主看看人邮的《windows 网络编程》里面对各种模式和IO模型都有比较详细的介绍。

僵哥 2006-06-16
  • 打赏
  • 举报
回复
不知道楼主是用来做服务器,还是多线程下载,如果是做服务器,可以考虑看看比如线程池呀,IOCP呀之类的概念,可能对你会有所帮助。
僵哥 2006-06-16
  • 打赏
  • 举报
回复
问题太乱,不好回答。
另外欠缺点socket和线程的基础。
建议先巩固一下基础。
pjie131 2006-06-16
  • 打赏
  • 举报
回复
没有人吗?

高手帮忙啊。。。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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