我在Boost asio的包有麻煩,讓我解釋一下。Boost Asio - 客戶端到服務器奇怪的輸出
#include <boost/asio.hpp>
#include <cstdlib>
#include <iostream>
#include <memory>
#include <utility>
#include "../configuration/constants.h" // port = 2013 ; maxLength = 512
class client : public std::enable_shared_from_this<client>
{
public:
client(boost::asio::ip::tcp::socket socket) : m_socket(std::move(socket)){}
void start()
{
read();
}
private:
void read()
{
auto self(shared_from_this());
m_socket.async_read_some(boost::asio::buffer(m_data, sizeof(m_data)), [this, self](boost::system::error_code error, std::size_t length)
{
if (!error)
{
std::cout << m_data;
send(length);
}
});
}
void send(std::size_t length)
{
auto self(shared_from_this());
boost::asio::async_write(m_socket, boost::asio::buffer(m_data, length), [this, self](boost::system::error_code error, std::size_t)
{
if (!error)
{
start();
}
});
}
boost::asio::ip::tcp::socket m_socket;
char m_data[maxLength];
};
class server
{
public:
server(boost::asio::io_service& ios, unsigned short port) : m_acceptor(ios, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)), m_socket(ios)
{
acceptConnection();
}
private:
void acceptConnection()
{
m_acceptor.async_accept(m_socket, [this](boost::system::error_code error)
{
if (!error)
std::make_shared<client>(std::move(m_socket))->start();
acceptConnection();
});
}
boost::asio::ip::tcp::acceptor m_acceptor;
boost::asio::ip::tcp::socket m_socket;
};
void connexionTCP()
{
try
{
std::cout << "TCP open" << std::endl;
boost::asio::io_service iosConnector;
server server(iosConnector, port); // port = 2013
iosConnecteur.run();
}
catch (std::exception& e)
{
std::cerr << "Exception : " << e.what() << "\n";
}
}
如果我嘗試運行它,TCP open是輸出。如果客戶端發送 「你好」 時,輸出(控制檯)爲:
HiÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͲ²²²½½½½½½½½
最後的代碼完成。任何想法 ?順便說一下,當我使用puTTY作爲客戶端時,當我發送「Hi」時,我收到「Hi」。這只是在寫給我這個控制檯。
在此先感謝
更好:只寫入你有'std :: cout.write(m_data,length)'的數據'否則你只是最後一個字符被破壞如果'length == maxlength' – sehe 2014-12-04 18:37:06
@Drax你的代碼編譯,但是這個只刪除「²²²½½½½½½½½½」。該「ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ」是存在的。 sehe:你的代碼也可以編譯,但是隻需要寫兩次消息。感謝您的幫助,但我想要做的是刪除那些2.我雖然關於分離器,但我不認爲在網絡處理器這是一個好主意。 – NorthernLight 2014-12-04 18:56:15
@NorthernLight號我的代碼不寫信息兩次。如果它似乎這樣做,你在這樣做的其他代碼:)(你是否有機會在一個控制檯上混合輸出「發送者」和「接收者」?) – sehe 2014-12-04 22:15:48