♣
CSocket两问
一:如何知道某个csocket是否处于连接状态(我不是指实际的连接状态,实际的连接状态应该用心跳包,
我的意思是,我如何知道某个csocket是否已调用过close函数)
二:我在线程中调用close函数出现断言错,程序如下:
//发送心跳包,由主线程激活
byte data = 0;
position pos, fpos;
while (1)
if (wait_object_0 == waitforsingleobject(hevent, 0))
{
pos = pclientlist->getheadposition();
while (pos)
{
fpos = pos;
ccomsocket* thisccomsocket = (ccomsocket*) pclientlist->getnext(pos);
if (2 == thisccomsocket->lostpulsenum ||
socket_error == thisccomsocket->send(&data, 1)) //出错了
{
pclientlist->removeat(fpos);
thisccomsocket->close(); //这里出错
delete thisccomsocket;
}
else
thisccomsocket->lostpulsenum++; //发送的心跳包个数加1,收到心跳包时减1
}
}
错误为sockcore.cpp文件的337行:
assert(pstate->m_hsocketwindow != null);
- · 推荐参考文章:
- 用InstallShield9打包 vb6+水晶报表中文版9.2
- 在C#中利用SharpZipLib进行文件的压缩和解压缩
- VB.NET 实现DirectSound9 (5) DS3D2
- ASP.Net状态管理
- (原创)按照一定的格式生成一定数量的随机数的例子
- 昨日关注:VB vs. C# MSIL Code Generation: Are the results equal?
- 可显示/隐藏左边控件的Splitter
- 《Visual Basic 2005在语言上的增强》全部文章列表
- 给 OpenPOP.Net 加一个小功能,可用于收取邮件时监测数据流量!
- .NET 1.1中预编译ASP.NET页面实现原理浅析 [1] 自动预编译机制浅析
· 网友精彩回答:
mfc的csocket类需要一个不可见窗口分发消息,这是mfc初始化的时候完成的,你可以看看这个m_hsocketwindow 是否正确创建或在什么地方被close了
1.调用过close的函数的csocket的句柄m_hsocket会等于invalid_socket,
2.在close之前加一句thisccomsocket->m_hsocket =invalid_socket,就能正常关闭,为什么会这样我也一直没搞清,好像由堆分配的csocket对象直接调用close时会出错,很奇怪的问题
另外
pclientlist->removeat(fpos);
thisccomsocket->close(); //这里出错
delete thisccomsocket;
我不知道pclientlist->removeat(fpos);这个函数中做了些什么,不会在这个函数里就已经delete csocket对象了吧
我也遇到过类似的问题,
你在函数之间传递socket参数时,形参最好用引用形式,不要用传值的形式。
我把上面的代码放到主线程中,执行一点问题都没有。
///////////////////////////////////////////////////////////////////
csocket 是需要有窗口支持的
- 更多问题:
- · 请高手解决关于播放声音问题的解决方案 !!!跪谢 分不够再加!否则我这个月就要被炒了
- · 帮个忙:解决一下乱码的问题?
- · 请高手入内:关于CONNECTION对象断线后的问题
- · 软件的数据安全,有没有比较好的措施,大家能不能给我点建议,程序上的,硬件上的都可以!
- · MIDP 2.0中TieldLayer和LayerManager在paint()时是不是把全部场景都画一遍?
- · 網域內某電腦用域帳號登錄出現這種情況?請高手幫忙解決!!
- · 兄弟们用过SONY本本的进来看一下了!!
- · 好去处:http://bbs.haoyinyuan.com/board.aspx?boardid=9!
- · 请部,Graphics2D中,如何设置打印边距?
- · 请教:在Linux下,使用什么软件测系统性能呢?
- · C# Winform 导出excel的时候总是出现如下问题:(急)
- · 求助!!在excell中读取sql server中的变量值。
- · 请教怎样使net view在纯DOS下可用,大散分
- · 多表查询的问题!很急!
- · 这个文件修改不了连接数据库的名称.请大侠们帮忙一下.在线等,谢谢!
- · 怎样将打开的线程关掉?

