1、怎么发送普通消息?
进行socket异步select选择,每个消息都是一个Msg包,并且分配一个senddlg为其发送消息。消息协议可以参考其他文档,消息统一封装成文本的方式发送,封装方式为[属性1:属性2:...:消息扩展消息],属性和属性之间和消息之间用冒号隔开,消息和扩展消息用消息结构体的exOffset标记隔开,发送的内容可以协定解密方式。
2、使用udp协议发送,如何确定消息是否已经发送成功?
消息发送出去,对方收到消息后会返回一条消息接收成功的确认消息,
然后发送端为每个senddlg开启一个ontimer函数,每1500ms确定一次(时间可以自己配置)发送出去的消息是否收到的回应,如果未收到则重新发送。
3、接收端如何确定两个消息是一样的,而丢弃后面的?
判断packetNo,判断addr ,判断 portNo,pocketNo是根据time()生成的。
4、msg 结构体(如下)的exOffset字段干啥用的?
struct MsgBuf {
HostSub hostSub;
int version;
int portNo;
ULONG packetNo;
ULONG command;
int exOffset; // expand message offset in msgBuf
int dummy;
char msgBuf[MAX_UDPBUF];
void Init(MsgBuf *org) {
if (org == NULL) {
memset(this, 0, (char *)&this->dummy - (char *)this);
*msgBuf = 0;
return;
}
memcpy(this, org, (char *)&this->dummy - (char *)this);
strcpy(this->msgBuf, org->msgBuf);
strcpy(this->msgBuf + exOffset, org->msgBuf + exOffset);
}
};
exOffset表示可以发送除消息意外的其他内容(比如组名称啥的,和消息区别开来),但前提是整个消息(加上exOffset)大小要小于MAX_UDPBUF。其实不用这个字段也行,我们可以把组名称啥的封装到消息buf里面去
5、如果输入的字符串超出了MAX_UDPBUF怎