no_error 发表于 2014-11-05 11:27

RPC编程:关于广播包的编程:跪求大神!!!

大神们!!!我现在用在linux上用RPC编程,在客户端用clnt_broadcas()函数向以太网中发广播包,服务器接收广播包并用svc_sendreply()函数返回自己的信息,这样客户端就可以知道这个以太网上所有的服务器的IP信息等等。可是客户端的广播包发过后有的主机可以接受,有的不可以接受,这是怎么回事呀,求大神指点!!!!

贴一段小代码:客户端: rpc_stat    = clnt_broadcast(DEVICE_CORE, DEVICE_CORE_VERSION, NULLPROC,
                      xdr_void, (char *)NULL,                           //inparams
                                  (xdrproc_t)xdr_wrapstring, (caddr_t) &clnt_res,   //ret params
                                  coreresult);


服务器:
static void device_core_1(struct svc_req *rqstp, SVCXPRT *transp)
{
        union {
                Create_LinkParms      create_link_1_arg;
                Device_WriteParms   device_write_1_arg;
                Device_ReadParms      device_read_1_arg;
                Device_GenericParms   device_readstb_1_arg;
                Device_GenericParms   device_trigger_1_arg;
                Device_GenericParms   device_clear_1_arg;
                Device_GenericParms   device_remote_1_arg;
                Device_GenericParms   device_local_1_arg;
                Device_LockParms      device_lock_1_arg;
                Device_Link         device_unlock_1_arg;
                Device_EnableSrqParms device_enable_srq_1_arg;
                Device_DocmdParms   device_docmd_1_arg;
                Device_Link         destroy_link_1_arg;
                Device_RemoteFunc   create_intr_chan_1_arg;
        } argument;
        char          *result, corereply;
        //bool_t   (*xdr_argument)(), (*xdr_result)();
        xdrproc_t      xdr_argument, xdr_result;
        char      *(*local)(DOTS);

#ifdef MULTITHREAD
        DWORD TID         = 0;
        HANDLE threadHandle = NULL;
        struct call_params *params;
#endif

        switch (rqstp->rq_proc)
        {
                case NULLPROC:
            //result   = lxiInstrAttr.DevName;
            strcpy(corereply,"Core:CE41 LXI-VXI");
                        result   = corereply;
                        result = 0;
                        xdr_result = (xdrproc_t)xdr_wrapstring; //xdr_char;//xdr_void; //xdr_wrapstring;
                        //printf("\n%s", result);
                        (void)svc_sendreply(transp, xdr_result, (caddr_t)&result);
                        //break;
                        return;

                case create_link:
                        xdr_argument = (xdrproc_t)xdr_Create_LinkParms;
                        xdr_result   = (xdrproc_t)xdr_Create_LinkResp;
                        local      = (char *(*)(DOTS)) create_link_svc_1;
                        break;

                case device_write:
                        xdr_argument = (xdrproc_t)xdr_Device_WriteParms;
                        xdr_result   = (xdrproc_t)xdr_Device_WriteResp;
                        local      = (char *(*)(DOTS)) device_write_svc_1;
                        break;

                case device_read:
                        xdr_argument = (xdrproc_t)xdr_Device_ReadParms;
                        xdr_result   = (xdrproc_t)xdr_Device_ReadResp;
                        local      = (char *(*)(DOTS)) device_read_svc_1;
                        break;
}
页: [1]
查看完整版本: RPC编程:关于广播包的编程:跪求大神!!!