C++中使用Socket通信包定义和读取方法
来源:互联网 发布:gif图分解软件 编辑:程序博客网 时间:2024/05/28 11:49
由于TCP/IP协议中,不能携带我们数据的长度,也就是说如果我们发的数据为变长度,接收端收到若干字符后就不知道是不是发送完成了,还是要继续等待,一般来说,VC中的解决方案为发送端和接收端 定义一组共享的 通信协议包,发送按照通用接口将这些结构体包数据发送出去,接收者判断每个包类型,组装成不同的结构体,完成一次网络传输。关键问题有:
1. 每个结构体包都需要在开头定义自己的标识符,可以用1 byte整数约定,附加的,可以定义包数据总长度(包括指针指向数据的长度)
2. 对于丁长度数据,可以不定义成员数据的长度,但是对于变长度(指针指向的数据), 必需定义包的时候,附件长度,使接收端接收后,知道还需读取多上长度数据这个指针指向的数据发送完毕。
3. 发送端更具不同的包类型, 写若干个通用的发送函数,接收端也类似的写相应多个的接受函数,进行迭代调用,很容易实现通用的发送和接受接口,使得该接口对调用者完全透明。
通信包结构体可以如下定义:
// 每个包都有的头信息
struct PK_HEAD {
BYTE pkType;
DWORD pkLength;
};
struct PK_A{
PK_HEAD head; // 每个包都有的头信息,标记此通信包的总长和包类型。
DWORD contentLength; //字符型数据内容长度
BYTE* content; //字符型数据内容
DWORD content0Length; // 定长度数据内容长度
BYTE[10000] content0;
PK_A nag;
DWORD pkBLength;
PK_B* pkB;
};
struct PK_B{
PK_HEAD head; // 每个包都有的头信息,标记此通信包的总长和包类型。
}
// 接受时
read()
{
int pkType = .../
// 根据第一个byte判断不同包类型,调用子函数递归组装其他PK通信包。
switch()
angn
};
- C++中使用Socket通信包定义和读取方法
- C++中使用Socket通信包定义和读取方法
- C++中使用Socket通信包定义和读取方法
- socket通信中tcp和udp包大小确定
- socket通信中包不全问题
- 使用NIO包实现Socket通信
- jsp中定义和使用"方法"
- Java中方法的定义和使用
- android 中使用socket使native和framework通信
- android 中使用socket使native和framework通信
- android 中使用socket使native和framework通信
- android 中使用socket使native和framework通信
- android 中使用socket使native和framework通信
- android 中使用socket使native和framework通信
- android 中使用socket使native和framework通信
- android 中使用socket使native和framework通信
- android 中使用socket使native和framework通信
- android 中使用socket使native和framework通信
- uvalive 4885 差分约束
- linux 目录中几种bin
- android中include标签的使用
- 使用override需要注意的地方
- 基于socket简单通信协议实现(c/c++)
- C++中使用Socket通信包定义和读取方法
- 一个好玩的API函数MessageBoxTimeout,可控制消息框自动关闭
- 非循环单向链表-增删改查排-释放
- CString::GetLength()获得字节数的正确方法
- 如何找到触发DocumentEvent的源控件
- 初识windows编程之五
- C++11新特性:自动类型推断和类型获取
- C++11新特性:Lambda函数(匿名函数)
- 一笔人生帐