📄 rpccli.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include "rpcsds.h"
#include "test_intf.h"
#ifdef _VXWORKS
#include <ioLib.h>
#define MSG_NOSIGNAL 0
#endif
#define DATA_THROUGH_A_NETWORK
//#define DATA_THROUGH_A_FILE
#define SERVER_ADDRESS "127.0.0.1"
//#define SERVER_ADDRESS "192.168.255.1"
#ifdef DATA_THROUGH_A_FILE
typedef struct tag_test_params
{
FILE* w;
FILE* r;
} test_params_t, * test_params_p;
int test_intf_write_stream(void* buf_, unsigned int buf_sz, void* param, unsigned int network_order)
{
char* buf = buf_;
unsigned int i;
for (i = 0; i < buf_sz; i++)
{
printf("%02hhx ", buf[i]);
};
printf("\n");
fwrite(buf_, 1, buf_sz, ((test_params_p)param)->w);
return 0;
};
int test_intf_read_stream(void* buf_, unsigned int buf_sz, void* param, unsigned int network_order, unsigned int*
read_sz)
{
char* buf = buf_;
unsigned int i;
*read_sz = fread(buf_, 1, buf_sz, ((test_params_p)param)->r);
for (i = 0; i < buf_sz; i++)
{
printf("%02hhx ", buf[i]);
};
printf("\n");
return 0;
};
#endif
#ifdef DATA_THROUGH_A_NETWORK
#ifndef WIN32
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/tcp.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#if defined(_HPUX) || defined(_SOLARIS) || defined(_QNX)
#define MSG_NOSIGNAL 0
#endif
#else
#include <winsock2.h>
#define MSG_NOSIGNAL 0
#endif
/*
#include <netinet/tcp.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
*/
typedef struct tag_test_params
{
int tl;
} test_params_t, * test_params_p;
int mco_init_network_client_interface(test_params_p nctx, char* address, unsigned short port)
{
struct sockaddr_in sin;
#ifdef WIN32
WSADATA wsa;
int r = WSAStartup(MAKEWORD(2, 0), &wsa);
if (r != 0)
{
WSACleanup();
return 1;
};
#endif
/* initialize a socket */
nctx->tl = (int)socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
/* make a connection */
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
sin.sin_addr.s_addr = inet_addr(address);
if (connect(nctx->tl, (struct sockaddr*) &sin, sizeof(sin)) < 0)
{
return 1;
}
return 0;
};
int mco_clear_network_client_interface(test_params_p nctx)
{
#ifndef WIN32
#ifdef _VXWORKS
shutdown(nctx->tl, 0);
#else
shutdown(nctx->tl, SHUT_RDWR);
#endif
close(nctx->tl);
#else /* WIN32 */
shutdown(nctx->tl, SD_BOTH);
closesocket(nctx->tl);
#endif /* WIN32 */
return 0;
};
int test_intf_write_stream(void* buf_, unsigned int buf_sz, void* param, unsigned int network_order)
{
test_params_p nctx = (test_params_p)param;
char* buf = buf_;
unsigned int i;
for (i = 0; i < buf_sz; i++)
{
printf("%02hhx ", buf[i]);
};
printf("\n");
if ( - 1 == send(nctx->tl, buf_, buf_sz, MSG_NOSIGNAL))
{
return 1;
}
return 0;
};
int test_intf_read_stream(void* buf_, unsigned int buf_sz, void* param, unsigned int network_order, unsigned int*
read_sz)
{
test_params_p nctx = (test_params_p)param;
char* buf = buf_;
unsigned int i;
if ( - 1 == ((*read_sz) = recv(nctx->tl, buf_, buf_sz, MSG_NOSIGNAL)))
{
return 1;
}
for (i = 0; i < buf_sz; i++)
{
printf("%02hhx ", buf[i]);
};
printf("\n");
return 0;
};
#endif
void mco_rpc_fatal_error(int e)
{
printf("Fatal error: %d\n", e);
exit(1);
};
extern mco_rpc_context_t test_intf_ctx;
int main(int argc, char* argv[])
{
unsigned short usa[4] =
{
0x10, 0x20, 0x30, 0x40
};
unsigned short usb[3] =
{
0x2000, 0x3000, 0x4000
};
int result = 0;
test_params_t params;
int5 ints =
{
1, 2, 3, 4, 5
};
test_struct_t st;
test_struct_variable_t vs;
test_struct_union_t ua;
test_struct_union_t ub;
ua.tp = 0;
ua.dt.a = 0x12345678;
ub.tp = 1;
ub.dt.b = "12345678";
test_intf_ctx.param = ¶ms;
vs.a = usa;
vs.b = usb;
vs.a_sz = sizeof(usa);
vs.b_len = sizeof(usb) / sizeof(usb[0]);
st.a = 10;
st.b = 'a';
st.c = "ABCDEF";
st.d = 0xF00F;
st.e[0] = - 1;
st.e[1] = 0;
st.e[2] = 1;
st.f[0].a = 'b';
st.f[0].b = 0xABCD;
st.f[0].c = 0xFFFFAAAA;
st.f[0].d = 10000000;
st.f[1].a = 'x';
st.f[1].b = 0xEFAB;
st.f[1].c = 0x55555555;
st.f[1].d = 0;
#ifdef DATA_THROUGH_A_FILE
params.r = fopen("test1_r.bin", "r");
params.w = fopen("test1_w.bin", "w");
#endif
#ifdef DATA_THROUGH_A_NETWORK
/* put here the desired server IP address
for example:
if ( 0 != mco_init_network_client_interface( ¶ms, "XXXX.XXXX.XXXX.XXXX", 8082 ) ) {
*/
if (0 != mco_init_network_client_interface(¶ms, SERVER_ADDRESS, 8082))
{
printf("Unable to connect\n");
return 1;
};
#endif
test_int(10);
test_void_int(20);
test_int_string("12345");
test_int_int5(ints);
test_int_pstruct(&st);
test_int_variable_len(&vs);
test_int_union(&ua);
test_int_union(&ub);
#ifdef DATA_THROUGH_A_NETWORK
mco_clear_network_client_interface(¶ms);
#endif
#ifdef DATA_THROUGH_A_FILE
fclose(params.w);
if (params.r)
{
fclose(params.r);
}
#endif
printf("End of the test\n");
return result;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -