太难为我了。。。。1个月没 搞定

lwglucky 2001-09-14 12:03:04
我的server在同时连接时会产生系统线程挂起,而客户端单独顺序连接时没错,请问我 该怎么解决
伪代码如下:
....初始化套介子
bind(s,.....);
while(true)
{


listen(s,SO_MAX);
CConnector * p=new CConnector ;
p->m_soket1=Accept(......);
p->ConnectToServer(....);
Sleep(3);
}

CConnector {
SOCKET m_soket1,m_soket2;
void ConnectToServer();
}

CConnector::ConnectToServer()
{
cc(soket2,ServerName,...); ---------?????
AfxBeginThread(....); -------开始服务线程
}
当有2个以上的用户在同一时刻同时连接时,我发现在????处,系统的出错代码是“套疖子已经完成的操作”,所以我猜想是connect连接太慢,却有2个客户来连接,由于是多线程程序,所以很难打断点调式(哪位大虾有调试多线程的招数??)-------请问:我分析正确吗????
...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yueyue 2001-09-14
  • 打赏
  • 举报
回复
你的listen要提到循环外面去呀。
tpProgramer 2001-09-14
  • 打赏
  • 举报
回复
你的cc(socket2,ServerName,...)函数做什么用的?

在线程里面可以加断点的,在主线程中也可以加断点,当停在主线程断点处,就可以开始调试了,不过使用单步不行,要使用F5,因为调试时挂起了程序,子线程不能连续执行,F5可以使子线程执行到它的断点处,我经常用这个方法。
flywhc 2001-09-14
  • 打赏
  • 举报
回复
我不知道你的程序到底怎么写的,"???" 那行是什么东西?
都已经accept的socket都已经连接好了,应该直接recv/send就可以了。
而且listen的位置怎么跑循环里……

但我知道你的算法很好不好。
首先,一个用户开一个线程的模型在windows下是最糟糕的模型,系统消耗极大,速度慢。
建议用完成端口或者完成模型,至少也该用消息模型。

其次,使用多线程的目的是让主线程能迅速回到accept()等待下一个连接,因此acept后应该紧跟着CreateThread,其他一切操作都放到线程里去完成,那个sleep更是绝对不应该有。

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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