我正在使用metro应用和win32桌面开发Windows 8.1聊天客户端应用。从winrt app连接到Tcp套接字上的win32应用程序时出现问题 - 异常连接失败,错误没有来自其他计算机的回复。问题是什么?
我在区域设置mashine上进行测试:
void Connector::ConnectSocketTsp(void)
{
socket = ref new StreamSocket();
rootPage->NotifyUser("Connecting to ...", NotifyType::StatusMessage);
{
HostName^ serverHost = ref new HostName("127.0.0.1"); //("localhost");
// Connect...
create_task(socket->ConnectAsync(
serverHost, "15500", SocketProtectionLevel::PlainSocket)).then([this](task<void> previousTask)
{
try
{
previousTask.get();
rootPage->NotifyUser("Connected", NotifyType::StatusMessage);
m_reader = ref new DataReader(socket->InputStream);
m_reader->InputStreamOptions = InputStreamOptions::ReadAhead;
m_writer = ref new DataWriter(socket->OutputStream);
ReceiveStringLoop(m_reader, socket);
}
catch (Exception^ exception)
{
rootPage->NotifyUser("Connect failed with error: " + exception->Message, NotifyType::ErrorMessage);
}
});
}
}
exception-&gt; Message =&#34;尝试连接失败,因为在所需的时间内从另一台计算机获得所需的响应已断开连接或由于不正确的响应已建立连接已连接计算机。&# 34;
用于翻译消息的服务:
void start()
{
logMessage(QString("Start service"), QtServiceBase::Information);
QCoreApplication *app = application();
daemon = new ClientSocket(15500, app);
if ( !daemon->listen(QHostAddress::LocalHost, 15500) ) // QHostAddress::Any
logMessage(QString("Failed to bind to port %1").arg(daemon->serverPort()), QtServiceBase::Error);
else
logMessage(QString("Success to bind to port %1").arg(daemon->serverPort()), QtServiceBase::Information);
if ( !daemon->isListening() )
{
logMessage(QString("Failed to bind to port %1").arg(daemon->serverPort()), QtServiceBase::Error);
app->quit();
}
}
Telnet成功连接到127.0.0.1 15500 ...
答案 0 :(得分:3)
默认情况下,Windows应用商店应用无法连接到同一台计算机上的其他应用。
在调试过程中可以抑制此块,或者(在Windows 8.1更新版本中)为侧载应用程序绕过此块(chue x的链接和“无法完成”注释适用于Windows 8,但现在已过期)
没有可认证的方法来循环回来通过商店部署的应用程序。
请参阅How to enable loopback and troubleshoot network isolation (Windows Store apps)和Using network loopback in side-loaded Windows Store apps