标签: qlocalsocket

QLocalSocket是否真的用于namedpipes

根据Qt文档,如果我们想在Windows上使用命名管道,我们可以使用QLocalSocket.我正在用Qt编写服务器和客户端程序.如果我尝试使用WIN32 API在管道中写入一些消息,Qt客户端不会显示它.此外,如果客户端再次使用WIN32 API进行写入,则Qt服务器不会回显发送的消息.QLocalSocket真的推荐用于命名管道吗?

这是Win32 Server代码

     wcout << "Creating an instance of a named pipe..." << endl;
    // Create a pipe to send data
    HANDLE pipe = CreateNamedPipeW(
        L"\\\\.\\pipe\\ServicePipe", // name of the pipe
        PIPE_ACCESS_OUTBOUND, // 1-way pipe -- send only
        PIPE_TYPE_BYTE, // send data as a byte stream
        100, // only allow 1 instance of this pipe
        0, // no outbound buffer
        0, // no inbound buffer
        0, // use default wait time
        NULL // use default security attributes
        ); …
Run Code Online (Sandbox Code Playgroud)

c++ qt qlocalsocket qt5

14
推荐指数
1
解决办法
5646
查看次数

无法启动qlocalserver

我在我的IPC解决方案中使用Qlocalsocket,我能够启动服务器并接受来自QLocalSocket客户端的连接并进行良好的通信,没有任何问题.

但是我的问题发生在我杀死服务器的进程时,我不能让QLocalServer再次在同一个地方监听,我必须更改服务名称才能再次启动它,这在运行时环境是不可能的.

那么如何让前一个进程发布该名称呢?

这是我如何启动服务器:

m_server = new QLocalServer(this);
if (!m_server->listen("serviceUniqueName")) {
    qDebug() << "Not able to start the Server";
    return;
}
Run Code Online (Sandbox Code Playgroud)

qt ipc qlocalsocket

9
推荐指数
2
解决办法
3186
查看次数

Qt4.5:在app.exec之前使用基于事件循环的localsocket

我正面临着Qt的实际问题.我正在使用一个与QLocalSocket通信的类到另一个进程(管道/ unix套接字),我需要在其他事件发生之前进行通信,即在app.exec()启动之前(或者更确切地说,应用程序启动之后) ).我正在使用的类需要一个eventloop,所以如果我在启动事件循环之前调用类方法它就不起作用.事件循环准备好后,有什么办法可以启动吗?我想要创建一个隐藏的仅限事件的窗口,并在隐藏的窗口构造函数中执行我的职责,并将此窗口固定为顶层.

基本上,我需要这个本地套接字通信任务在事件循环可用时立即启动.

有任何想法吗?

谢谢.

events qt multithreading loops qlocalsocket

3
推荐指数
1
解决办法
1561
查看次数

如果服务器以管理员权限运行,QLocalSocket :: connectToServer会因QLocalSocket :: SocketAccessError而失败(Windows 7)

Qt 4.8.1的Microsoft Windows 7实现中出现以下问题:

QLocalServer(命名管道)正在等待客户端连接,它作为以管理权限(例如系统服务)运行的服务器应用程序运行.

如何允许非特权 QLocalSocket客户端连接到该服务器?始终拒绝连接尝试,错误代码为3(QLocalSocket :: SocketAccessError).有解决方案吗?

编辑:我发现,解决方案是通过允许完全访问"Everyone"Sid来改变管道安全性.这里唯一的问题是,SetSecurityInfo一直调用始终失败并显示" 拒绝访问 "错误.首先,我们必须获得一个管柄.由于管道已经由Qt创建,我们将打开它CreateNamedPipe.

HANDLE hPipe = CreateNamedPipe(
    (const wchar_t *)_Server->fullServerName().utf16(), // pipe name
    PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,       // read/write access
    PIPE_TYPE_BYTE |          // byte type pipe
    PIPE_READMODE_BYTE |      // byte-read mode
    PIPE_WAIT,                // blocking mode
    PIPE_UNLIMITED_INSTANCES, // max. instances
    0,                  // output buffer size
    0,                  // input buffer size
    3000,                     // client time-out
    0 // Default Security
);
// Same call to open/create pipe as in …
Run Code Online (Sandbox Code Playgroud)

winapi qt uac named-pipes qlocalsocket

3
推荐指数
1
解决办法
3975
查看次数

标签 统计

qlocalsocket ×4

qt ×4

c++ ×1

events ×1

ipc ×1

loops ×1

multithreading ×1

named-pipes ×1

qt5 ×1

uac ×1

winapi ×1