【问题标题】:ways to send messages to a service?向服务发送消息的方法?
【发布时间】:2013-03-27 14:02:44
【问题描述】:

我有一个客户端服务器程序,我想将服务器更改为服务。所以我从这里获取了一些代码Svp.cpp。它工作正常,但我使用 UDP 创建了客户端服务器,所以我想知道 是否有另一种方法可以将消息发送到服务?客户端向服务器(服务)发送消息,服务器只是回显它们。发送和接收消息是否需要 UDP 或 TCP 连接?

这里是接收客户端消息的程序部分(其余代码取自Svp.cpp)

SOCKET socketS;

InitWinsock();
struct sockaddr_in local;
struct sockaddr_in from;
int fromlen = sizeof(from);
local.sin_family = AF_INET;
local.sin_port = htons(1234);
local.sin_addr.s_addr = INADDR_ANY;

socketS = socket(AF_INET,SOCK_DGRAM,0);
bind(socketS,(sockaddr*)&local,sizeof(local));
while (1)
{
    char buffer[1024];
    ZeroMemory(buffer, sizeof(buffer));
    if (recvfrom(socketS,buffer,sizeof(buffer),0,(sockaddr*)&from,&fromlen)!=SOCKET_ERROR)
    {
        sendto(socketS, buffer, sizeof(buffer), 0, (sockaddr*)&from, fromlen);
    }
}
closesocket(socketS);

【问题讨论】:

  • 客户端和服务器应用程序是否在同一台机器上?
  • 是的,他们在同一台机器上
  • 您并没有真正检查错误。在普通程序中尝试相同的方法,但也要检查错误并在出现错误时将其打印出来。
  • 服务和“普通”程序的唯一区别是操作系统正在启动服务,其他一切都一样。
  • 我知道该程序尚未完成,但它确实有效。我想知道这里需要 UDP 连接吗?

标签: c++ windows service udp client-server


【解决方案1】:

如果客户端和服务器应用程序在同一台机器上,您可以改用命名管道。

Named Pipes

我有一个系统服务,我必须删除 UI,我们没有创建一个套接字来在 UI 和服务之间进行通信,而是使用了命名管道。这很好,因为我们的一些客户担心机器上打开侦听 TCP 套接字的安全性。

如果你走这条路,你必须在两个应用程序之间设置某种信号,因为管道不会像套接字那样通知你读/写。但这是一个非常可行的解决方案。

【讨论】:

  • 谢谢,但我不确定如何使用命名管道发送消息
  • 来自我给你的链接:“命名管道是一种命名的、单向或双工管道,用于管道服务器和一个或多个管道客户端之间的通信。”这就是命名管道的用途 - 在两个不同的软件之间发送消息。
  • 来自上一页的链接:msdn.microsoft.com/en-us/library/windows/desktop/… - 这给出了如何使用它们的说明。
猜你喜欢
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多