这个程序是先用控件按钮来创建一个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);
去掉就不会有错,但是又不能实现不断监听的作用,大家来帮我看一下是什么原因。
就可以了
建议多看看有关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)
{
...
}