C++中使用Socket通信包定义和读取方法
来源:互联网 发布:ubuntu 16.04 wingide 编辑:程序博客网 时间:2024/05/19 17:26
由于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通信
- 结构体中的空指针
- asp验证码生成
- 亲身经历:月薪从800元-1万5千元,我用了6年时间。
- C#多显示器转换的两种方法——SetWindowPos,Screen
- 黑莓模拟器与电脑互发邮件
- C++中使用Socket通信包定义和读取方法
- 040_《Delphi函数参考大全》
- php解析XML的样例及参考
- Linux环境下的C/C++基础调试技术1——初步了解
- delphi
- 面向对象更是一种方法论
- ORACLE中null的排序问题
- 无题
- 图灵2010.12书讯