C++ 2个线程中的升压插座
我正在使用boost套接字和boost线程。(同步套接字)。如果我理解正确的话,这个计划就行不通了C++ 2个线程中的升压插座,c++,multithreading,sockets,boost,boost-asio,C++,Multithreading,Sockets,Boost,Boost Asio,我正在使用boost套接字和boost线程。(同步套接字)。如果我理解正确的话,这个计划就行不通了 using boost::asio::ip::tcp; boost::asio::ip::tcp::socket *MySocket; bool Key = true; void Function1() { try { boost::asio::io_service io_service; tcp::resolver resolver(io_ser
using boost::asio::ip::tcp;
boost::asio::ip::tcp::socket *MySocket;
bool Key = true;
void Function1()
{
try
{
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
boost::system::error_code error;
boost::asio::ip::address address = boost::asio::ip::address::from_string(IP, error);
tcp::endpoint ep(address, 1235);
MySocket = new tcp::socket(io_service);
MySocket->connect(ep);
Key = false;
}
catch(std::exception e)
{
std::cout<<e.what;
}
}
void Function2()
{
boost::array <char, 8> buf;
size_t len = MySocket->read_some(boost::asio::buffer(buf), error);
//Always len == 0 and buf.data() is MMMMMMM
}
void main()
{
boost::thread Thread(&Function1);
while(Key);
Function2();
MySocket->close();
}
使用boost::asio::ip::tcp;
boost::asio::ip::tcp::socket*MySocket;
布尔键=真;
无效函数1()
{
尝试
{
boost::asio::io_服务io_服务;
tcp::解析器解析器(io_服务);
boost::system::error\u code error;
boost::asio::ip::address address=boost::asio::ip::address::from_字符串(ip,错误);
端点ep(地址,1235);
MySocket=新的tcp::套接字(io_服务);
MySocket->connect(ep);
Key=false;
}
捕获(标准::异常e)
{
std::coutclose();
}
您使用本地io\U服务创建套接字,在function1
返回后,该服务将被销毁。使其成为全局的。(当然,不要以这种方式设计实际应用程序!请坚持Asio文档中描述的方法。)我认为简单的答案是阅读文档。文档中有很好的文档,甚至有示例。这不是怎么做的。另外,您正在取消对空指针的引用,这是未定义的行为。我不明白。您认为MySocket是空指针吗?在function1()中我正在初始化和打开这个套接字。它在另一个程序中连接到端口。为什么在函数2中()不工作?我读了Boosi::asIO的文档,但是我不理解。用于在C语言中写的,我没有这个问题。C++比C语言更重:(你的Function1代码描述不够。你在哪里创建套接字实例?提供你的实现,我们可能会给你一个错误的线索。你使用键的方式也很糟糕,会导致问题。用一个。试试。最后,void main
是非标准的。main
返回int
,句点。我知道这一点,但我只是想把它做好。感谢全球io_服务。