【发布时间】:2021-02-03 09:07:31
【问题描述】:
我的服务器代码如下:
#include <bits/stdc++.h>
#include <boost/asio.hpp>
#include <boost/array.hpp>
#include <boost/asio/socket_base.hpp>
using namespace std;
using boost::asio::ip::tcp;
using namespace boost::asio;
using namespace boost;
int main(int argc, char* argv[])
{
io_service iosev;
ip::tcp::acceptor acceptor(iosev,
ip::tcp::endpoint(ip::tcp::v4(), 1000));
for(;;)
{
ip::tcp::socket socket(iosev);
acceptor.accept(socket);
std::cout << socket.remote_endpoint().address() << std::endl;
acceptor.bind(ip::tcp::endpoint(ip::tcp::v4(), 1000));
boost::system::error_code ec;
std::string message;
while (std::cin>>message) {
socket.write_some(buffer(message), ec);
if (*(message.end()-1)=='@') break;
}
if(ec)
{
std::cout <<
boost::system::system_error(ec).what() << std::endl;
break;
}
}
return 0;
}
我的客户端代码如下:
#include <bits/stdc++.h>
#include <boost/asio.hpp>
#include <boost/array.hpp>
#include <boost/asio/socket_base.hpp>
using namespace std;
using boost::asio::ip::tcp;
using namespace boost::asio;
using namespace boost;
int main(){
try
{
boost::asio::io_service io;
tcp::socket socket(io);
tcp::endpoint end_point(boost::asio::ip::address::from_string("127.0.0.1"), 1000);
socket.connect(end_point);
for (;;)
{
boost::array<char, 128> buf;
boost::system::error_code error;
size_t len = socket.read_some(boost::asio::buffer(buf), error);
if (error == boost::asio::error::eof)
{
break; //connection closed cleadly by peer
}
else if (error)
{
throw boost::system::system_error(error); //some other error
}
cout.write(buf.data(), len);
cout<<"\n";
}
}
catch (std::exception& e)
{
cout<<e.what()<<endl;
}
std::system("pause");
}
如果我运行一次服务器并打开两个将设置为连接“127.0.0.1:1000”的客户端,第一个打开的客户端工作正常,但第二个打开的客户端无法接收服务器函数 write_some(...) 发送的任何内容并且第二个打开的客户端没有收到任何错误(似乎它总是在等待某些东西)。为什么? 如何更改编程代码以让客户端在连接到已被另一个客户端连接的服务器:端口时出现错误/异常?
【问题讨论】:
标签: c++ sockets boost tcp mingw-w64