全二重 tcp ストリームを実装したいと考えています。ここに例があります。
//server.cpp
#include <SDKDDKVer.h>
#include <iostream>
using namespace std;
#include <boost/asio.hpp>
#include <boost/thread.hpp>
boost::asio::ip::tcp::iostream SocketStream;
void ThreadA()
{
for(;;)
{
std::string Line;
std::getline(SocketStream, Line); //Y
std::cout << Line << std::endl;
}
}
void ThreadB()
{
for(;;)
{
std::string Line;
std::getline(std::cin, Line); //Z
SocketStream<<Line<<std::endl; //X
}
}
int main()
{
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 4444);
boost::asio::io_service io_service;
boost::asio::ip::tcp::acceptor acceptor(io_service, endpoint);
boost::system::error_code ec;
acceptor.accept(*SocketStream.rdbuf(), ec);
boost::thread tA(ThreadA);
boost::thread tB(ThreadB);
tA.join();
tB.join();
return 0;
}
//client.cpp
#include <SDKDDKVer.h>
#include <iostream>
using namespace std;
#include <boost/asio.hpp>
#include <boost/thread.hpp>
boost::asio::ip::tcp::iostream SocketStream;
void ThreadA()
{
for(;;)
{
std::string Line;
std::getline(SocketStream, Line);
std::cout << Line << std::endl;
}
}
void ThreadB()
{
for(;;)
{
std::string Line;
std::getline(std::cin, Line);
SocketStream<<Line<<std::endl;
}
}
int main()
{
boost::system::error_code ec;
SocketStream.connect("127.0.0.1", "4444");
boost::thread tA(ThreadA);
//boost::thread tB(ThreadB);
tA.join();
//tB.join();
return 0;
}
しかし、それは行 X でブロックさ
れますboost::asio::ip::tcp::iostream
。
Q2 , ミッションを達成するのに十分でない場合boost::asio::ip::tcp::iostream
、他に何を使用すればよいですか? 双方向モードがあるの
を見ました。boost::iostream
それは私が探しているものですか?私は慣れてboost::iostream
いないので、それが実際に何をするのかわかりません。も失敗した場合、の非同期操作を使用する必要があり
ますか? 私が望むのは、ソケットを実際にストリームのように動作させることであり、非同期操作をラップするのは難しいかもしれません。boost::iostream
boost::asio
追加:私が望むSocketStream
のは、読み取り時にブロックしている間に書き込みできることです。つまり、ストリームは全二重です。
アドバイスをいただければ幸いです。