| 
 | 
 
下面是一个改正后的MFC Socket示例代码,使用线程来处理每个客户端的请求,并确保线程安全。我们将使用 `CWinThread` 来创建线程,并正确管理客户端Socket的生命周期。 
 ### 服务端代码 
 
### 客户端代码 
- // Client.cpp : Defines the entry point for the application.
 
  
- #include "stdafx.h"
 
  
- #include "Client.h"
 
  
- #include <afxsock.h>
 
  
-  class CMyClientApp : public CWinApp
 
  
- {
 
  
- public:
 
  
-     virtual BOOL InitInstance();
 
  
- };
 
  
-  class CMySocket : public CSocket
 
  
- {
 
  
- public:
 
  
-     void OnReceive(int nErrorCode);
 
  
- };
 
  
-  BOOL CMyClientApp::InitInstance()
 
  
- {
 
  
-     AfxSocketInit(); // 初始化Socket库
 
  
-      CMySocket clientSocket;
 
  
-     if (!clientSocket.Create())
 
  
-     {
 
  
-         AfxMessageBox(_T("无法创建客户端Socket"));
 
  
-         return FALSE;
 
  
-     }
 
  
-      if (!clientSocket.Connect(_T("127.0.0.1"), 12345)) // 连接到服务器
 
  
-     {
 
  
-         AfxMessageBox(_T("无法连接到服务器"));
 
  
-         return FALSE;
 
  
-     }
 
  
-      CString message = _T("Hello, Server!"); // 要发送的信息
 
  
-     clientSocket.Send(message, message.GetLength() * sizeof(TCHAR)); // 发送信息
 
  
-     clientSocket.Receive(); // 接收处理后的信息
 
  
-      return TRUE;
 
  
- }
 
  
-  void CMySocket::OnReceive(int nErrorCode)
 
  
- {
 
  
-     if (nErrorCode == 0)
 
  
-     {
 
  
-         TCHAR buffer[1024];
 
  
-         int nReceived = Receive(buffer, sizeof(buffer)); // 接收数据
 
  
-         buffer[nReceived / sizeof(TCHAR)] = '\0'; // 添加字符串结束符
 
  
-         AfxMessageBox(buffer); // 显示接收到的信息
 
  
-     }
 
  
-     CSocket::OnReceive(nErrorCode);
 
  
- }
 
  
-  CMyClientApp theApp;
 
  复制代码 
### 编译和运行 
1. 创建一个MFC应用程序项目。 
2. 将服务端代码放入  `Server.cpp`  文件中,将客户端代码放入  `Client.cpp`  文件中。 
3. 编译并运行服务端程序,然后运行多个客户端程序进行测试。 
 ### 注意事项 
- 确保防火墙允许访问指定的端口(在这个例子中是12345)。 
- 使用  `AfxBeginThread`  创建线程来处理每个客户端的请求。 
- 处理逻辑为将接收到的信息转换为大写,您可以根据需求修改处理逻辑。 
 
 
 |   
 
 
 
 |