编写一个以sendot和recvfrom函数的通信程序,发送端发送消息finish退出通讯的完整C++代码
时间: 2024-11-03 22:13:01 浏览: 42
在C++中,你可以使用`boost.asio`库中的`ip::tcp`模块来编写基于TCP协议的socket通信程序,其中`sendto`和`recvfrom`函数用于非连接(datagram)模式下的数据发送和接收。如果你想要在连接型TCP上使用`send`和`recv`,那么你需要先建立连接。以下是使用`boost::asio`编写的简单示例,假设发送端发送消息"finish"作为退出信号:
```cpp
#include <iostream>
#include <boost/asio.hpp>
const std::string MESSAGE_FINISH = "finish";
int main() {
try {
// Boost.Asio初始化
boost::asio::io_context io_context;
// 创建TCP socket
boost::asio::ip::tcp::socket socket(io_context);
// 连接到服务器地址(这里仅作演示,实际应用需要替换为你服务器的实际IP和端口)
boost::asio::ip::tcp::resolver resolver(io_context);
boost::asio::ip::tcp::resolver::query query("localhost", "5000"); // 服务端端口号
boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
boost::asio::connect(socket, endpoint_iterator);
// 发送消息
boost::asio::write(socket, boost::asio::buffer(MESSAGE_FINISH));
// 关闭套接字并结束IO循环
boost::system::error_code ignored_error;
socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ignored_error);
socket.close(ignored_error);
std::cout << "Message sent: " << MESSAGE_FINISH << std::endl;
} catch (std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
阅读全文