- 论坛徽章:
- 0
|
大神们!!!我现在用在linux上用RPC编程,在客户端用clnt_broadcas()函数向以太网中发广播包,服务器接收广播包并用svc_sendreply()函数返回自己的信息,这样客户端就可以知道这个以太网上所有的服务器的IP信息等等。可是客户端的广播包发过后有的主机可以接受,有的不可以接受,这是怎么回事呀,求大神指点!!!!
贴一段小代码:- 客户端: rpc_stat = clnt_broadcast(DEVICE_CORE, DEVICE_CORE_VERSION, NULLPROC,
- xdr_void, (char *)NULL, //in params
- (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[20];
- //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[0].DevName;
- strcpy(corereply,"Core:CE41 LXI-VXI");
- result = corereply;
- result[17] = 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;
- }
复制代码 |
|