|
MFC Socket示例代码,服务端在接收到客户端传递的信息后,进行处理并返回处理后的信息给客户端。 ### 服务端代码
- // Server.cpp : 定义应用程序的入口点。
- #include "stdafx.h"
- #include "Server.h"
- #include <afxsock.h>
- class CMyServerApp : public CWinApp
- {
- public:
- virtual BOOL InitInstance();
- };
- class CMySocket : public CSocket
- {
- public:
- void OnAccept(int nErrorCode);
- void ProcessClient(CSocket* pClientSocket);
- };
- BOOL CMyServerApp::InitInstance()
- {
- AfxSocketInit(); // 初始化Socket库
- CMySocket serverSocket;
- if (!serverSocket.Create(12345)) // 创建监听端口
- {
- AfxMessageBox(_T("无法创建服务器Socket"));
- return FALSE;
- }
- serverSocket.Listen(); // 开始监听
- return TRUE;
- }
- void CMySocket::OnAccept(int nErrorCode)
- {
- if (nErrorCode == 0)
- {
- CSocket* pClientSocket = new CSocket;
- Accept(*pClientSocket); // 接受客户端连接
- ProcessClient(pClientSocket); // 处理客户端请求
- }
- CSocket::OnAccept(nErrorCode);
- }
- void CMySocket::ProcessClient(CSocket* pClientSocket)
- {
- TCHAR buffer[1024];
- int nReceived = pClientSocket->Receive(buffer, sizeof(buffer)); // 接收数据
- buffer[nReceived / sizeof(TCHAR)] = '\0'; // 添加字符串结束符
- // 处理接收到的信息(这里简单的将信息转换为大写)
- CString responseMessage = _T("处理后的信息: ");
- for (int i = 0; i < nReceived / sizeof(TCHAR); ++i)
- {
- responseMessage += toupper(buffer[i]);
- }
- pClientSocket->Send(responseMessage, responseMessage.GetLength() * sizeof(TCHAR)); // 发送处理后的信息
- pClientSocket->Close(); // 关闭客户端Socket
- delete pClientSocket; // 释放内存
- }
- CMyServerApp theApp;
复制代码
### 客户端代码
- // Client.cpp : 定义应用程序的入口点。
- #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)。
- 在服务端中,处理逻辑为将接收到的信息转换为大写,您可以根据需求修改处理逻辑。
- 这个示例展示了如何使用MFC的Socket类实现简单的TCP/IP通信,并处理客户端发送的信息。
|
|