首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

socket传输构造体,或者结构体转换成字符串

2013-06-26 
socket传输结构体,或者结构体转换成字符串我用SNMP的API获取了信息,现在想用socket传输到服务器端。但结构

socket传输结构体,或者结构体转换成字符串
我用SNMP的API获取了信息,现在想用socket传输到服务器端。
但结构体好像不能直接传输,但又没办转换成字符串。
求大神指点一下,该怎么办。
下面是部分代码

//查询结果
char *string = NULL;
SnmpMgrOidToStr(&variableBindings.list[0].name, &string);
printf("Variable = %s\n", string);
                         
        //发送查询结果
        ret = send (sClient, (char *)&string, sizeof(string), 0);
if (string) SNMP_free(string);
if (ret == SOCKET_ERROR)
{
printf("send() failed!\n");
}
else
printf("client info has been sent!");

//转换成字符串
        char str[255];
sprintf(str, "%s",&variableBindings.list[0].value);

//发送
ret = send (sClient, (char *)&str, sizeof(str), 0);
if (ret == SOCKET_ERROR)
{
printf("send() failed!\n");
}
else
printf("client info has been sent!");
printf("\n");
socket SNMP 字符串
[解决办法]
你需要的是序列化, 搜索 protobuf 
[解决办法]
也可以自己打包解包封装
[解决办法]
强制转化为BYTE数组发送,接收方再转化为结构体
[解决办法]
这个涉及到大小端问题,发送结构体的时候,如果其中一个变量超过一个字节,要进行大小端转换

//2个字节类型的转换
#define  BSWAP_16(x) \
(UINT16) ( ((((UINT16)(x)) & 0x00ff) << 8 ) 
[解决办法]
 \
((((UINT16)(x)) & 0xff00) >> 8 ) \
 )
//四个字节类型的转
#define BSWAP_32(x) \
(UINT32) ( (( ((UINT32)(x)) & 0xff000000 ) >> 24) 
[解决办法]
 \
(( ((UINT32)(x)) & 0x00ff0000 ) >> 8 ) 
[解决办法]
 \
(( ((UINT32)(x)) & 0x0000ff00 ) << 8 ) 
[解决办法]
 \
(( ((UINT32)(x)) & 0x000000ff ) << 24) \
 )



[解决办法]
引用:
这个涉及到大小端问题,发送结构体的时候,如果其中一个变量超过一个字节,要进行大小端转换

//2个字节类型的转换
#define  BSWAP_16(x) \
(UINT16) ( ((((UINT16)(x)) & 0x00ff) << 8 ) 


[解决办法]
 \
((((UINT16)(x)) & 0xff00) >> 8 ) \
 )
//四个字节类型的转
#define BSWAP_32(x) \
(UINT32) ( (( ((UINT32)(x)) & 0xff000000 ) >> 24) 
[解决办法]
 \
(( ((UINT32)(x)) & 0x00ff0000 ) >> 8 ) 
[解决办法]
 \
(( ((UINT32)(x)) & 0x0000ff00 ) << 8 ) 
[解决办法]
 \
(( ((UINT32)(x)) & 0x000000ff ) << 24) \
 )




而且还要注意因为对齐而产生的填充bytes

热点排行