请用C++,基于UDP编写一个包含Server/Client的网络应用程序
时间: 2024-09-25 08:19:30 浏览: 30
在C++中,我们可以使用`socket API`(如`boost.asio`库)来基于UDP协议创建服务器和客户端的网络应用。这里给出一个简单的示例,首先我们创建一个基础的UDP服务器接收并回应数据,然后再构建一个客户端发送数据到服务器。
**服务器端(server.cpp)**:
```cpp
#include <boost/asio.hpp>
using boost::asio::ip::udp;
class Server {
public:
void start(int port) {
boost::asio::io_service io_service;
udp::endpoint endpoint(udp::v4(), port);
udp::socket socket(io_service, udp::v4());
socket.open(endpoint.protocol());
for (;;) {
boost::array<char, 1024> buffer;
size_t bytes_received = 0;
try {
boost::system::error_code ignored_error;
bytes_received = socket.receive_from(buffer, endpoint, ignored_error);
std::string message(buffer.data(), bytes_received);
std::cout << "Received from client: " << message << "\n";
// 发送响应
boost::array<char, 1024> response("ACK");
socket.send_to(response, endpoint);
}
catch (const boost::system::system_error& e) {
if (e.code() != boost::asio::error::operation_aborted)
std::cerr << "Error: " << e.what() << '\n';
}
}
}
};
int main() {
Server server;
server.start(12345); // 使用端口号12345
return 0;
}
```
**客户端(client.cpp)**:
```cpp
#include <boost/asio.hpp>
using boost::asio::ip::udp;
class Client {
public:
void connectToServer(const std::string& server_ip, int server_port) {
boost::asio::io_service io_service;
udp::resolver resolver(io_service);
udp::resolver::query query(server_ip, std::to_string(server_port));
udp::endpoint endpoint = *resolver.resolve(query);
udp::socket socket(io_service, udp::v4());
socket.open(endpoint.protocol());
boost::array<char, 1024> request("Hello Server!");
socket.send_to(request, endpoint);
boost::array<char, 1024> buffer;
size_t bytes_received = 0;
while ((bytes_received = socket.receive_from(buffer, endpoint)) > 0) {
std::string message(buffer.data(), bytes_received);
std::cout << "Received from server: " << message << "\n";
}
}
};
int main() {
Client client;
client.connectToServer("localhost", 12345); // 连接到本地服务器
return 0;
}
```
运行时,客户端会向服务器发送消息"Hello Server!",然后打印接收到的任何回复。