c++编写一个基于C/S结构的程序,客户端和服务器可建立基于TCP的连接,客户端可持续向服务器发送信息。
时间: 2024-09-19 09:02:41 浏览: 69
在C++中,创建一个基于Client-Server (C/S)架构的TCP连接程序通常涉及以下几个步骤:
1. **服务器端**(Server部分):
- 使用`std::socket`库创建监听套接字,指定IP地址和端口号。
- `bind()`函数将套接字绑定到特定的地址和端口上。
- `listen()`使套接字进入监听状态,等待客户端连接。
- 使用`accept()`接受客户端连接,并返回一个新的套接字代表连接。
```cpp
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
int main() {
try {
tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 8080));
for (;;) {
tcp::socket socket(io_service);
acceptor.accept(socket);
handle_client_connection(socket);
}
} catch (std::exception& e) {
std::cerr << "Exception: " << e.what() << "\n";
}
return 0;
}
void handle_client_connection(tcp::socket socket) {
// 在这里处理客户端请求并发送响应
}
```
2. **客户端**(Client部分):
- 创建一个新的TCP套接字,并设置远程服务器的IP地址和端口。
- 调用`connect()`函数尝试连接服务器。
- 客户端可以使用`write()`方法发送数据给服务器,然后调用`read()`方法接收回复。
```cpp
int main() {
try {
tcp::resolver resolver(io_service);
tcp::resolver::query query("localhost", "8080");
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::socket socket(io_service);
boost::asio::connect(socket, endpoint_iterator);
std::string message = "Hello Server!";
boost::system::error_code ignored_error;
boost::asio::write(socket, boost::asio::buffer(message), ignored_error);
boost::array<char, 128> receive_buffer;
boost::asio::read(socket, boost::asio::dynamic_buffer(receive_buffer), ignored_error);
std::cout << "Received: '" << std::string(receive_buffer.data()) << "'\n";
} catch (std::exception& e) {
std::cerr << "Exception: " << e.what() << "\n";
}
return 0;
}
```
阅读全文