|
下面是一个改正后的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` 创建线程来处理每个客户端的请求。
- 处理逻辑为将接收到的信息转换为大写,您可以根据需求修改处理逻辑。
|
|