谢谢你的这个spserver
想请教一下, 服务器端或者客户端向对方发送数据的时候,我是把数据放在了一个struct里面,服务端或客户端接收的时候, 怎么判断数据开始
或结束呢,
我现在是在数据的开头给了一个structinfo信息,structinfo是一个enum型的数据,
接收的时候对buffer进行强制类型转换,
//get struct info
byte stype = ((StructInfo*)spbuff->getBuffer())->type;
//user login info
if(stype == StructInfo::USERLOGININFO){
.....
}
数据结构是这样的
typedef struct tagUserLoginInfo {
StructInfo sinfo;
char mUserID[16];
char mPassword[16];
} UserLoginInfo, *PUserLoginInfo;
其实就是判断开始数据(只有一位), 如果和定义的类型相同,就知道是这段类型的数据, 不知道这样处理是否妥当, 谢谢
如果遇到问题,暂时先用 getBuffer 和 erase 两个接口组合来实现这个接口的功能吧。
2009/12/21 xuyean <xuy...@gmail.com>:
printf("in decode....%d\n", inBuffer->getSize());
int ret = eMoreData;int len = 0;
if(inBuffer->getSize() >= MINIMUMSTRUCTPACKAGESIZE){StructInfo si;memcpy(&si, inBuffer->getBuffer(), MINIMUMSTRUCTPACKAGESIZE);if (inBuffer->getSize() >= si.size){
ret = eOK;if( NULL != mBuffer ) free( mBuffer );
mLen = si.size;mBuffer = malloc( mLen + 1 );((char*)mBuffer)[ len ] = '\0';//inBuffer->take((char*) mBuffer, mLen + 1);memcpy(mBuffer, inBuffer->getBuffer(), mLen);inBuffer->erase(mLen);}}return ret;
如果请求包特别大,并且不希望内存一直增长,也可以实现,就是实现比较复杂。
可以使用 DefaultDecoder ,每次收到任何一段数据,都调用 handle 方法,在 handle 方法中,自行组包。
2009/12/24 xuyean <xuy...@gmail.com>:
> --
>
> You received this message because you are subscribed to the Google Groups
> "spserver" group.
> To post to this group, send email to spse...@googlegroups.com.
> To unsubscribe from this group, send email to
> spserver+u...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/spserver?hl=en.
>