多线程的Socket通讯MFC
时间: 2023-05-31 12:05:21 浏览: 110
MFC多线程之间通信
4星 · 用户满意度95%
多线程的Socket通讯MFC是指使用MFC框架实现多线程的Socket通讯。在MFC中,可以使用CWinThread类来创建多线程程序,使用CSocket类实现Socket通讯。
具体步骤如下:
1. 创建一个主线程,并创建一个Socket对象。
2. 创建一个CWinThread对象,并在该对象的函数体中创建一个Socket对象。
3. 启动CWinThread对象,该对象将在新线程中执行。
4. 在主线程中使用Socket对象发送数据。
5. 在新线程中使用Socket对象接收数据。
6. 在接收到数据后,可以使用PostMessage函数将数据发送给主线程进行处理。
7. 在程序结束时,需要关闭所有Socket对象,并退出所有线程。
示例代码如下:
//主线程
CSocket m_socket;
void CMainFrame::OnSendData()
{
CString strData = "Hello World!";
m_socket.Send(strData, strData.GetLength());
}
//新线程
class CMyThread : public CWinThread
{
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
DECLARE_DYNCREATE(CMyThread)
};
IMPLEMENT_DYNCREATE(CMyThread, CWinThread)
BOOL CMyThread::InitInstance()
{
CSocket m_socket;
m_socket.Create();
m_socket.Connect("127.0.0.1", 8080);
char buf[1024];
int len = m_socket.Receive(buf, 1024);
buf[len] = '\0';
CString strData = buf;
AfxGetMainWnd()->PostMessage(WM_USER_RECEIVEDATA, (WPARAM)&strData, 0);
m_socket.Close();
return TRUE;
}
int CMyThread::ExitInstance()
{
return CWinThread::ExitInstance();
}
void CMainFrame::OnStartThread()
{
CMyThread* pThread = (CMyThread*)AfxBeginThread(RUNTIME_CLASS(CMyThread));
}
void CMainFrame::OnReceiveData(CString* pData)
{
MessageBox(*pData);
}
void CMainFrame::OnClose()
{
m_socket.Close();
CFrameWnd::OnClose();
}
阅读全文