小型聊天室问题(附源码)

meikeer 2006-05-11 05:55:21
长时间运行后会提示stack overflow 然后程序自动终止运行,不知道是什么原因引起的??
不知道代码中哪部份写错了,说不准哪地方出了问题

研究好长时间仍旧未找到原因,求大家帮忙
源程序有点长,只好发到网站,不在这里贴出来了

http://www.lybase.net/~coco/Chat.zip
...全文
728 34 打赏 收藏 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
meikeer 2006-05-18
  • 打赏
  • 举报
回复
555怎么可能呢,我同时用多个客户端连接,然后用任务管理器结束掉一个进程后,其它的再发消息就会出错了
铖邑 2006-05-18
  • 打赏
  • 举报
回复
专门等你的啊。你按照那天的办法调试应该没有问题的啊
meikeer 2006-05-18
  • 打赏
  • 举报
回复
啊???你怎么天天都在线啊?

我也没吃饭呢
铖邑 2006-05-18
  • 打赏
  • 举报
回复
不好意思啊,楼主,昨天忘了这件事情了,因为还没吃饭呢,就想着晚饭的事情。
meikeer 2006-05-18
  • 打赏
  • 举报
回复
555,没有解决,结贴吧。。。
meikeer 2006-05-15
  • 打赏
  • 举报
回复
各位老大,分不够可以再加,估计其它人也有遇到这样情况的,明天结贴
meikeer 2006-05-13
  • 打赏
  • 举报
回复
555还是不好使
我是在XP上运行服务端,在第一台电脑上登录,然后把网线拔掉,再到第二台电脑上登录发消息,服务端就死掉了
铖邑 2006-05-12
  • 打赏
  • 举报
回复
void __fastcall TForm1::MyServerClientError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
//Socket->Close(); 这句不用
ErrorCode=0;
}
meikeer 2006-05-12
  • 打赏
  • 举报
回复
pp616(傻小子)可以给出一点源程序吗?我还是没有太明白

谢谢xpdavis(咕嘟)一直关心我的问题.
我是先将服务端运行起来,然后在BCB环境中编译运行客户端,正常连接后,我按CTRL+F2终止客户端的运行,就会提示这个错误,这跟正常连接后用户拔掉网线出的错误提示是一样的
铖邑 2006-05-12
  • 打赏
  • 举报
回复
是CTRL+F2吧??我还是试不出来
铖邑 2006-05-12
  • 打赏
  • 举报
回复
ok
meikeer 2006-05-12
  • 打赏
  • 举报
回复
那我明天再找个XP的机器试试??
铖邑 2006-05-12
  • 打赏
  • 举报
回复
windows xp
meikeer 2006-05-12
  • 打赏
  • 举报
回复
??怎么可能???你是什么操作系统吖?

局域网多个客户端连接,如果有一个网线拔掉的话,服务端就会死机
铖邑 2006-05-12
  • 打赏
  • 举报
回复
奇怪,我怎么都不会出错呢?
meikeer 2006-05-12
  • 打赏
  • 举报
回复
void __fastcall TForm1::MyServerClientError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ErrorCode=0;
}
这样以后客户端按CTRL+F2时服务端不会死机,也不会有提示了,但是其它的用户再登录或发言时服务端会再次死掉。。。。。555我以前从来没有遇到过这样的问题,这样的代码该如何写啊?
pp616 2006-05-11
  • 打赏
  • 举报
回复
试试在MyServerClientDisconnect 里把需要发的信息记录到一个TStringList中。不急着发送。

用个定时器,定时去查询TStringList里是否有需要发送的信息。如果有就发送一次。

在我这测试是MyServerClientDisconnect还没处理完又一次进入MyServerClientDisconnect
导致堆栈溢出
pp616 2006-05-11
  • 打赏
  • 举报
回复
SendMessage 是windows系统api 定义函数名时最好别这么定义。

写了个客户端并发程序。错无出在
MyServerClientDisconnect 中
把MyServerClientDisconnect中SendMessage 函数用try catch包含。在catch语句块里下断点。
meikeer 2006-05-11
  • 打赏
  • 举报
回复
这回试出来了,客户端登录以后我按CTRL+F12重置程序后,服务端就会出现问题

void __fastcall TForm1::MyServerClientError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
Socket->Close();
ErrorCode=0;
}

加上这个代码后问题依旧,高手教教我
铖邑 2006-05-11
  • 打赏
  • 举报
回复
TCP连接时间长了,没有通信的话会超时断开,也是很正常的。你在socket里面的出错事件代码里面处理一下
加载更多回复(14)

1,317

社区成员

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

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