我实现了两个简单的客户端和服务器示例,但它不起作用。客户端和服务器都只是冻结而没有打印任何消息。
客户端.cpp
int main(int argc, char * argv[])
{
std::string raw_ip = "127.0.0.1";
int port = 3333;
try
{
asio::ip::tcp::endpoint
ep(asio::ip::address::from_string(raw_ip), port);
asio::io_service ios;
asio::ip::tcp::socket sock(ios, ep.protocol());
sock.connect(ep);
asio::streambuf request;
std::ostream request_stream(&request);
request_stream << "request from clinet\n";
asio::streambuf response;
asio::read_until(sock, response, "\n");
std::istream response_stream(&response);
std::cout << response_stream.rdbuf() << std::endl;
}
catch(system::system_error &e)
{
std::cout << "Encounter error: " << e.what() << std::endl;
return e.code().value();
}
}
服务器.cpp
int main(int argc, char * argv[])
{
std::string raw_ip="127.0.0.1";
int port=3333;
try
{
asio::ip::tcp::endpoint ep(asio::ip::address_v4::any(),port);
asio::io_service ios;
asio::ip::tcp::acceptor acceptor(ios, ep);
acceptor.listen();
asio::ip::tcp::socket sock(ios);
acceptor.accept(sock);
asio::streambuf request;
asio::read_until(sock, request, "\n");
std::istream request_stream(&request);
std::cout << request_stream.rdbuf() << std::endl;
asio::streambuf response;
std::ostream response_stream(&response);
response_stream << "response from server\n";
}
catch(system::system_error &e)
{
std::cout << e.what() << std::endl;
return -1;
}
return 0;
}
另外我想知道向/从套接字传输大量数据的最佳方法,我们如何告诉套接字我已经完成向套接字写入数据?我们怎么知道我们已经从套接字读取了最后一个字节的数据?谢谢。