还有,我在线程中new了一个socket,发现只能发送信息,
不能接收信息,这是为什么?
即声明为app的成员变量,为socket指针,在线程中对该指针进行实例
不能接收信息,这是为什么?
即声明为app的成员变量,为socket指针,在线程中对该指针进行实例
解决方案 »
- Richedit 拉动滚动条图片闪烁问题
- 一道小程序
- 返回VARIANT类型,var.vt = vt_variant,如何取其中的值?
- 关于ini的注释问题
- 我用ShellExecute函数执行了另外一个程序,我想等这个程序结束再接着执行程序,有什么办法啊,急啊,不用sleep函数
- 怎么组建局域网?
- ##############菜鸟的问题####################
- 好困惑,关于CListCtrl 让不同item动态显示颜色怎样触发DrawItem?如何把CListCtrl的Checkbox框disable掉?
- 请问有可下载的GDI+文档吗?
- 如何使用Spy++查看消息
- 如何在VC中动态制作简单的安装程序?(相当于实现InstallShield的功能)
- C++如何定义指向函数的指针?
第二:侦测一个connection是否物理断开,你是说对方的主机是否开机?还是你的一个tcp connection是否存在,如果是后者可以发送1 byte的字节,看看对方是否受到,当然这个只能对tcp有用。
第三:Socket自己是不考虑任何代理的情况。如果你要用代理可以推荐你一个类www.codeguru.com下有一个人写了一个sock5的包装类。不错的。
我的类是这样的
CServerSocket public : CAsyncSocket
CClientSocket public : CAsyncSocket
CClientSocket连接成功的反馈一定在CClientSocket::OnConnect中
关键在于,另外的app函数使用了CClientSocket类时,如何得到 OnConnect中的反馈呢
void CSListen::OnAccept(int nErrorCode)
{
pRef->Accept();
CAsyncSocket::OnAccept(nErrorCode);
}
void CTrans::Accept()
{
pConnect=new CSConnect(this);
pListen->Accept(*pConnect);
}
CAsyncSocket封装了消息机制的,不需要手工添加
1.SetTimer不能在线程中调用,否则不起作用
2.Socket不能在线程中创建,否则有问题
实际我的做法是想提供Client.ConnectServer()调用的方式,即封装函数本身等待反馈才继续
执行
BOOL CmyThread::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_TIMER)
{
KillTimer(NULL,pMsg->wParam);
}
return CWinThread::PreTranslateMessage(pMsg);
}
2,Socket也可以在线程中使用!!!!!!
2.增加参数app->m_bFlag=false;
3.在csock::OnReceive中如果有消息收,则app->m_bFlag=true;
4.在CWaitDlg中每隔一秒检查一次app->bFlag,
if(app->bFlag)
CDiaog::OnOK();
5.建议在CWaitDlg中加动画表示进行中