제 문제는 다음과 같습니다. 비동기 TCP 서버와 해당 비동기 클라이언트가 있습니다. 내가 필요한 것은 내 클라이언트 (연속적으로)에 실시간 변수를 쓸 수있는 동시에 클라이언트로부터 명령을받을 수있는 방법입니다.async_read를 수행하는 동안 루프에서 boost :: asio :: io_service async_write를 수행하십시오.
클라이언트가이 작업을 트리거해야하는 명령을 보내면 테스트 메시지 만 보내지 만 그 후에는 서버가 클라이언트를 기다리는 동안 응답하지 않기 때문에 하나의 메시지 만 보낼 수있는 방법을 찾습니다. 명령.
이 기능은 클라이언트에서 보낸 명령을 처리하는 하나이며받은 후 함수 h_read에 전달 : 나는 명령의 쓰기 지속적으로 트리거해야 하나입니다 있는지 확인 여기에
void conn::h_write() {
memset(data_, '\0', sizeof(char)*max_length);
async_read_until(sock_ , input_buffer_, '\n',
boost::bind(&conn::h_read, shared_from_this()));
}
실시간 버퍼를 클라이언트에 전달합니다.이 경우 명령은 "c"입니다.
void conn::h_read(){
std::string line;
std::istream is(&input_buffer_);
std::getline(is, line);
std::string output = "";
output.reserve(5000);
if (line == "exit"){
return;
}
if (line.empty()){
memset(data_, '\0', sizeof(char)*max_length);
async_read_until(sock_ , input_buffer_, '\n', boost::bind(&conn::h_read, shared_from_this()));
return;
}
clientMessage_ = line;
clientMessage_ += '\n';
if (clientMessage_.substr(0,1) == "c"){
std::stringstream toSend;
streamON = true;
toSend.str("c l 1 ");
toSend << std::fixed << std::setprecision(2) << luxID1[0];
toSend.str(" ");
// Here I sent the real time value for the first time
boost::asio::async_write(sock_, boost::asio::buffer(toSend.str()), boost::bind(&conn::sendRealTime, shared_from_this()));
}
else{ // Does't really matter to this example
// Do some stuff here and send to client
boost::asio::async_write(sock_, boost::asio::buffer(I2CrxBuf_), boost::bind(&conn::h_write, shared_from_this()));
}
}
지금이 변수의 연속 전송을 처리해야하는 기능입니다 그러나 동시에 명령 클라이언트를 읽을 수 :
void conn::sendRealTime(){
if (streamON){
boost::asio::async_write(sock_, boost::asio::buffer("This is a test\n"), boost::bind(&conn::h_write, shared_from_this()));
memset(data_, '\0', sizeof(char)*max_length);
async_read_until(sock_ , input_buffer_, '\n', boost::bind(&conn::h_read, shared_from_this()));
}
else{
memset(data_, '\0', sizeof(char)*max_length);
async_read_until(sock_ , input_buffer_, '\n', boost::bind(&conn::h_read, shared_from_this()));
}
}
문제는 그 첫 번째 후 차단 "async_read_util"함수를 호출하십시오.
내가 원한 것이 가능할 지조차 모르지만 누군가가 나를 어떻게 도와 주실 수 있습니까? 내가 필요로 무엇