dbus c程序-使用方法调用发送(带应答)和接收

dbus c程序-使用方法调用发送(带应答)和接收,dbus,Dbus,我是新来的D-Bus。我想要一个c程序使用dbus_message_new_method_call函数发送和接收数据。我从链接中尝试了以下程序,但在server.c端出现错误,如“client.signal.Object的名称未由任何.service文件提供” “server.c” /*服务器.c*/ #包括 #包括 #包括 #包括 #包括 静态DBusHandlerResult filter_func(DBusConnection*连接、DBusMessage*消息、void*usr_数据)

我是新来的D-Bus。我想要一个c程序使用dbus_message_new_method_call函数发送和接收数据。我从链接中尝试了以下程序,但在server.c端出现错误,如“client.signal.Object的名称未由任何.service文件提供”

“server.c”
/*服务器.c*/
#包括
#包括
#包括
#包括
#包括
静态DBusHandlerResult
filter_func(DBusConnection*连接、DBusMessage*消息、void*usr_数据)
{
DBusMessage*回复;
dbus_bool_t handled=false;
char*word=NULL;
DBusError dberr;
dbus_error_init(&dberr);
dbus_message_get_args(message,&dberr,dbus_TYPE_STRING,&word,dbus_TYPE_无效);
printf(“接收消息:%s\n”,word);
已处理=正确;
reply=dbus\u message\u new\u method\u return(message);
字符*回复内容;
printf(“\n输入您的回复信息:”);
scanf(“%s”,回复内容);
dbus\u message\u append\u args(reply,dbus\u TYPE\u STRING,&reply\u content,dbus\u TYPE\u INVALID);
dbus\u connection\u send(连接,应答,空);
dbus_连接_冲洗(连接);
dbus_message_unref(回复);
返回(已处理?DBUS\u HANDLER\u RESULT\u handled:DBUS\u HANDLER\u RESULT\u NOT\u NOT\u handled);
}
int main(int argc,char*argv[])
{
DBusError dberr;
dbus连接*dbconn;
dbus_error_init(&dberr);
dbconn=dbus\u bus\u get(dbus\u bus\u会话,&dberr);
if(!dbus\u connection\u add\u filter(dbconn,filter\u func,NULL,NULL))
{
返回-1;
}
dbus\u bus\u add\u match(dbconn,“type='method\u call',interface='client.signal.type'”,&dberr);
while(dbus连接读写调度(dbconn,-1))
{
/*环路*/
}
返回0;
}
这里是client.c

#include <dbus/dbus.h>
#include <stdbool.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

static DBusHandlerResult
filter_func(DBusConnection *connection, DBusMessage *message, void *usr_data)
{
      dbus_bool_t handled = false;
      char *word = NULL;
      DBusError dberr;

      dbus_error_init(&dberr);
      dbus_message_get_args(message, &dberr, DBUS_TYPE_STRING, &word, DBUS_TYPE_INVALID);

       printf("receive message %s\n", word);
       handled = true;

 return (handled ? DBUS_HANDLER_RESULT_HANDLED : DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
}


int db_send(DBusConnection *dbconn)
{
     DBusMessage *dbmsg;
     char *word = (char *)malloc(sizeof(char));
     int i;

     dbmsg = dbus_message_new_method_call("client.signal.Object","/client/signal/Object", "client.signal.Type", "Test");

     scanf("%s", word);

         if (!dbus_message_append_args(dbmsg, DBUS_TYPE_STRING, &word, DBUS_TYPE_INVALID)) 
         {
              return -1;
         }

         if (!dbus_connection_send(dbconn, dbmsg, NULL)) 
         {
              return -1;
         }
     dbus_connection_flush(dbconn);
     printf("send message %s\n", word);

     dbus_message_unref(dbmsg);
 return 0;
}

int main(int argc, char *argv[])
{
     DBusError dberr;
     DBusConnection *dbconn;

     dbus_error_init(&dberr);

     dbconn = dbus_bus_get(DBUS_BUS_SESSION, &dberr);
         if (!dbus_connection_add_filter(dbconn, filter_func, NULL, NULL)) 
         {
             return -1;
         }

     db_send(dbconn);

          while(dbus_connection_read_write_dispatch(dbconn, -1)) 
          {
               db_send(dbconn);
          }
     dbus_connection_unref(dbconn);

 return 0;
}
#包括
#包括
#包括
#包括
#包括
静态DBusHandlerResult
filter_func(DBusConnection*连接、DBusMessage*消息、void*usr_数据)
{
dbus_bool_t handled=false;
char*word=NULL;
DBusError dberr;
dbus_error_init(&dberr);
dbus_message_get_args(message,&dberr,dbus_TYPE_STRING,&word,dbus_TYPE_无效);
printf(“接收消息%s\n”,word);
已处理=正确;
返回(已处理?DBUS\u HANDLER\u RESULT\u handled:DBUS\u HANDLER\u RESULT\u NOT\u NOT\u handled);
}
int db_发送(数据库连接*dbconn)
{
DBusMessage*dbmsg;
char*word=(char*)malloc(sizeof(char));
int i;
dbmsg=dbus\u message\u new\u method\u调用(“client.signal.Object”,“/client/signal/Object”,“client.signal.Type”,“Test”);
scanf(“%s”,单词);
if(!dbus_message_append_args(dbmsg,dbus_TYPE_STRING,&word,dbus_TYPE_INVALID))
{
返回-1;
}
if(!dbus_connection_send(dbconn,dbmsg,NULL))
{
返回-1;
}
dbus_连接_冲洗(dbconn);
printf(“发送消息%s\n”,word);
dbus_message_unref(dbmsg);
返回0;
}
int main(int argc,char*argv[])
{
DBusError dberr;
dbus连接*dbconn;
dbus_error_init(&dberr);
dbconn=dbus\u bus\u get(dbus\u bus\u会话,&dberr);
if(!dbus\u connection\u add\u filter(dbconn,filter\u func,NULL,NULL))
{
返回-1;
}
db_发送(dbconn);
while(dbus连接读写调度(dbconn,-1))
{
db_发送(dbconn);
}
dbus_连接_unref(dbconn);
返回0;
}
请帮我修一下

看看这里:

从外观上看,您需要编写一个描述服务的文件“*.service”

(引自网站)

这是我在谷歌搜索5分钟后发现的内容。

看看这里:

从外观上看,您需要编写一个描述服务的文件“*.service”

(引自网站)


这是我在谷歌搜索5分钟后发现的。

如果是这样,请使用谷歌并学习基础知识。然后学习编程并自己实现程序。我们可以提供帮助,但我们不会做你的工作。如果你不分享你的错误和源代码,你希望我如何帮助你?另外,请确保你的拼写和语法是正确的。读蹩脚的英语令人筋疲力尽。如果人们很难理解你,他们不会帮助你。请在你的问题中编辑你的代码。在这样做之前,读一读:如果你一直这样发帖,你不会得到任何帮助。这样更好。现在修复代码格式。和“{”和“}”之间的每个块都需要缩进一级。在这种情况下,请使用谷歌学习基础知识。然后学习编程并自己实现程序。我们可以提供帮助,但我们不会做你的工作。如果你不分享你的错误和源代码,你希望我如何帮助你?另外,请确保你的拼写和语法是正确的。读蹩脚的英语令人筋疲力尽。如果人们很难理解你,他们不会帮助你。请在你的问题中编辑你的代码。在这样做之前,读一读:如果你一直这样发帖,你不会得到任何帮助。这样更好。现在修复代码格式。和“{”和“}”之间的每个块都需要缩进一级。
#include <dbus/dbus.h>
#include <stdbool.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

static DBusHandlerResult
filter_func(DBusConnection *connection, DBusMessage *message, void *usr_data)
{
      dbus_bool_t handled = false;
      char *word = NULL;
      DBusError dberr;

      dbus_error_init(&dberr);
      dbus_message_get_args(message, &dberr, DBUS_TYPE_STRING, &word, DBUS_TYPE_INVALID);

       printf("receive message %s\n", word);
       handled = true;

 return (handled ? DBUS_HANDLER_RESULT_HANDLED : DBUS_HANDLER_RESULT_NOT_YET_HANDLED);
}


int db_send(DBusConnection *dbconn)
{
     DBusMessage *dbmsg;
     char *word = (char *)malloc(sizeof(char));
     int i;

     dbmsg = dbus_message_new_method_call("client.signal.Object","/client/signal/Object", "client.signal.Type", "Test");

     scanf("%s", word);

         if (!dbus_message_append_args(dbmsg, DBUS_TYPE_STRING, &word, DBUS_TYPE_INVALID)) 
         {
              return -1;
         }

         if (!dbus_connection_send(dbconn, dbmsg, NULL)) 
         {
              return -1;
         }
     dbus_connection_flush(dbconn);
     printf("send message %s\n", word);

     dbus_message_unref(dbmsg);
 return 0;
}

int main(int argc, char *argv[])
{
     DBusError dberr;
     DBusConnection *dbconn;

     dbus_error_init(&dberr);

     dbconn = dbus_bus_get(DBUS_BUS_SESSION, &dberr);
         if (!dbus_connection_add_filter(dbconn, filter_func, NULL, NULL)) 
         {
             return -1;
         }

     db_send(dbconn);

          while(dbus_connection_read_write_dispatch(dbconn, -1)) 
          {
               db_send(dbconn);
          }
     dbus_connection_unref(dbconn);

 return 0;
}
# (Lines starting with hash marks are comments)

# Fixed section header (do not change):
[D-BUS Service]
Names=com.bigmoneybank.Deposits;com.bigmoneybank.Withdrawals
Exec=/usr/local/bin/bankcounter