sock通信--数据结构的传送
来源:互联网 发布:数据的挖掘用于工作 编辑:程序博客网 时间:2024/05/16 13:57
sock通信中有几个问题必须注意,由于标准的不统一,有的机器使用的大端存储,而有的机器使用的是小端存储(如果对大小端不了解可以上网搜寻一下相关信息). 我们的机器的存储方式各不相同,但是由于历史原因,网络字节序使用的是大端,也就是说,我们要通过网络传输信息到远断,我们要当心了.
如果明确了传送信息的双方都是相同的存储方式那么还好办,如果传送双方的存储方式不相同或者不一定相同,我们就必须把发送的数据进行相应的格式转换再发送到网络上,直至远端.
由于网络字节序是大端,那么,我们再发送一个数据结构时,需要把这个结构中的每个成员转换成网络字节序,再发送到远端,而不只是简单的发送这些数据给远端.
下面是我在发送数据结构时使用的一些例程,希望对涉及到这方面的朋友有帮助.
在这个例子中,我定义了一个这样的结构体进行传送
typedef struct
{
uint16_t packetlen;
uint8_t cmdtype;
uint16_t sessionid;
uint16_t messageid;
uint32_t ackinfo;
} ControlHeader;
定义了这些函数处理结构体中的成员,把他们转换成相应的格式存入缓存中
//
//basic convert funtion declaration
//
void SendUint32_tToBuff(char *buf, uint32_t n);
void SendUint16_tToBuff(char *buf, uint16_t n);
void SendStringToBuff(char *buf, char *str);
uint32_t GetUint32_tFromBuff(char *buf);
uint16_t GetUint16_tFromBuff(char *buf);
//
//structure convert function declaration
//
void init_ControlHeader(uint8_t type, uint16_t sid, uint16_t mid,
uint32_t ack, ControlHeader *pHead);
void sendHeadtobuff(char *buf, ControlHeader *pHead);
void getHeaderfrombuff(void *buff, ControlHeader *p);
int getHeadlen();
上述定义存放在struct.h文件中,另外写了一个struct.c对上述声明进行定义
下面我们写一个简单的网络通信例程,进行试验
服务器端
客户端
完毕.
- sock通信--数据结构的传送
- android两台真机的sock udp 通信
- android 模拟器与手机的sock通信
- Python的socket网络编程1 sock简单通信实现
- 传送门:Messenger通信
- DOS下串口通信程序来传送文件的源代码。
- 基于TCP的局域网多用户通信、文件传送程序详解
- 表单的通信--主窗体消息传送到从窗体
- DOS下串口通信程序来传送文件的源代码
- 串口通信 同步传送与异步传送
- mysql.sock的问题
- sock 相关的结构
- mysql.sock的作用
- 关于sock通信之知乎问答
- socket通信传送结构体!
- socket通信传送结构体
- socket通信之传送数据
- glib库 通信相关的几个函数和数据结构(-)GSocketConnection
- eat python 001
- SQL注入漏洞接触
- js 删除数组元素(值而不是KEY)
- eat python 002 - Python对象持久化方法
- 打开ORACLE9i 的自动归档模式
- sock通信--数据结构的传送
- Stl的几个小技巧:map查找,string大写转换,map插入。
- 链表的基本操作(c实现)
- pcb贴片封装知识
- js中关于数组复制的一些认识(感谢IT民工和见Q,如见人的指导)
- 未授权于所需的程序接入权限 解决办法
- 今日中午颐豪酒店吃饭,晚上悦华将参加婚礼.
- .net c# 序列化和反序列
- Linux学习网站