这个程序是先用控件按钮来创建一个CSocket然后调用线程接收数据,在线程中再调用线程来保持不停地监听状态,程序如下:
void COverlayDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
socketSend.Create(6802,SOCK_STREAM,"192.168.0.18");
socketSend.Bind(6801,"192.168.0.18");
socketSend.Listen(5);
AfxBeginThread(TreadBegSocket,GetSafeHwnd());
}
UINT TreadBegSocket(void *pParam)
{
socketSend.Accept(asyncSend);
socketSend.Close();
AfxBeginThread(TreadBegSocket,pParam);
return 0;
}但是这样的话运到socketSend.Accept(asyncSend);就会出错,而编译是没有问题的。我把程序改成这样:
void COverlayDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
AfxBeginThread(TreadBegSocket,GetSafeHwnd());
}
UINT TreadBegSocket(void *pParam)
{
socketSend.Create(6802,SOCK_STREAM,"192.168.0.18");
socketSend.Bind(6801,"192.168.0.18");
socketSend.Listen(5);
socketSend.Accept(asyncSend);
socketSend.Close();
AfxBeginThread(TreadBegSocket,pParam);
return 0;
}这样开始的错误不会出现,但是显然会出现新的错误,因为socketSend.Create(6802,SOCK_STREAM,"192.168.0.18");把 AfxBeginThread(TreadBegSocket,pParam);
去掉就不会有错,但是又不能实现不断监听的作用,大家来帮我看一下是什么原因。
void COverlayDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
socketSend.Create(6802,SOCK_STREAM,"192.168.0.18");
socketSend.Bind(6801,"192.168.0.18");
socketSend.Listen(5);
AfxBeginThread(TreadBegSocket,GetSafeHwnd());
}
UINT TreadBegSocket(void *pParam)
{
socketSend.Accept(asyncSend);
socketSend.Close();
AfxBeginThread(TreadBegSocket,pParam);
return 0;
}但是这样的话运到socketSend.Accept(asyncSend);就会出错,而编译是没有问题的。我把程序改成这样:
void COverlayDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
AfxBeginThread(TreadBegSocket,GetSafeHwnd());
}
UINT TreadBegSocket(void *pParam)
{
socketSend.Create(6802,SOCK_STREAM,"192.168.0.18");
socketSend.Bind(6801,"192.168.0.18");
socketSend.Listen(5);
socketSend.Accept(asyncSend);
socketSend.Close();
AfxBeginThread(TreadBegSocket,pParam);
return 0;
}这样开始的错误不会出现,但是显然会出现新的错误,因为socketSend.Create(6802,SOCK_STREAM,"192.168.0.18");把 AfxBeginThread(TreadBegSocket,pParam);
去掉就不会有错,但是又不能实现不断监听的作用,大家来帮我看一下是什么原因。
解决方案 »
- BUTTON类名问题,ThunderRT6CommandButton
- 后台创建保存图片
- 不用MFC,怎么在windows form里Load一个Flash?
- 如何获取打开word的文本内容
- 如何使用CreateProcess函数调用java类
- CAsyncSocket如何向CPropertyPage对象传递消息?
- 二进制流
- 请教《VC++技术内幕》中的一个例题
- 我用InstallInshield打包我的程序,访问数据库时总提示错误!3天我也没解决!!!
- 怎么这个问题一直没人回答,我使用driver studio 做的,我给够一百分总行吧
- 老问题:编程语言的选择
- *****用ATL写COM,怎样操作才能支持client用智能指针的方法调用?*****
就可以了
建议多看看有关Socket机理的文章。
msdn或网上的。
解了燃眉之急,但不能根除。
socketListen.Bind(6801,"192.168.0.18");
socketListen.Listen(5);
-------------------------------------------
...
CListenSocket::OnAccept(int nErrorCode)
{
...
serverSocket.Accept(socketListen)
...
}
-------------------------------------------
....
serverSocket.send();...
....
-------------------------------------------
CServerSocket::OnReceive(int nErrorCode)
{
...
}