To Be C++
shaker's Blog
生当作人杰,死亦为鬼雄,至今思项羽,不肯过江东。
首页
新随笔
联系
聚合
管理
38 Posts :: 0 Stories :: 83 Comments :: 0 Trackbacks
公告
点击这里给我发QQ消息
留言簿
(14)
给我留言
查看公开留言
查看私人留言
随笔分类
(30)
C++(22)
Delphi(1)
Utility(7)
随笔档案
(38)
2008年6月 (1)
2008年3月 (1)
2008年2月 (1)
2007年10月 (2)
2007年9月 (1)
2007年8月 (2)
2007年7月 (1)
2007年5月 (2)
2007年4月 (2)
2007年2月 (2)
2006年12月 (7)
2006年11月 (2)
2006年10月 (2)
2006年9月 (12)
精彩blog
#ant
boost源码剖析
CppExplore
系统设计系列文章
Learning boost
懒人日志
笑笑小生的博客
沐枫小筑
微妙的平衡
有一些HGE的技巧
链接
C++博客
就是这里啦
Code Project
大名鼎鼎的网站 全e文
CSDN.net
感觉是个大杂烩 不专精 不过但凡国内的程序员大多也会去那看看的
VC知识库
VC资料网站 收集的还算多的 不过还需要向CodeProject学习
游戏外挂研究院
算是曾今国内众多外挂高手的根据地吧 不过人心散了... 难现往日辉煌
搜索
积分与排名
积分 - 27374
排名 - 66
最新评论
1. re: BCGControlBar Library Professional Edition v9.56
sigh, no key found.
--needkeyyyyyyyyyy
2. furosemide impedor chromotherapy
Do it now. It is not safe to leave a generous feeling to the cooling influences of the world.
--furosemide impedor chromotherapy
3. escitalopram
Laughing is the sensation of feeling good all over and showing it principally in one spot.
--escitalopram
4. tylenol
He who will not reason is a bigot; he who cannot is a fool; and he who dares not is a slave.
--tylenol
5. lorcet
评论内容较长,点击标题查看
--lorcet
阅读排行榜
1. C++ Builder 2007 破解文件(2933)
2. C++Builder2007 安装办法(1529)
3. [工具]VSS2005 下载(1494)
4. 用boost::regex来做词法分析(1477)
5. 花一晚上琢磨了个Skin换肤代码,请各位指教!(1305)
6. 以前写的一个网络流封包类(1163)
7. 发一个mir2的内挂代码(1143)
8. 用处不大却不是没用的一个类!(1141)
9. BCGControlBar Library Professional Edition v9.56(1128)
10. MSDN的Bug!(1126)
评论排行榜
1. write a simple os with asm&c(23)
2. Visual Assist X v10.3.1534 build 2006.09.02 cracked dll's by Av0id(8)
3. 传奇2TMD(7)
4. BCGControlBar Library Professional Edition v9.56(7)
5. C++ Builder 2007 破解文件(6)
6. 更新了下TMD!几张截图(5)
7. 发一个mir2的内挂代码(4)
8. MSDN的Bug!(3)
9. 传2TMD截图(3)
10. 2007年5月 Windows XP Pro SP2 最新正版验证破解文件(3)
以前写的一个网络流封包类
/**/
////////////////////////////////////
//
//
CStreamPacket by 太子 2005-12-13
//
/**/
////////////////////////////////////
//
#pragma once
const
c_BufferBlockSize
=
0x10000
;
class
CStreamPacket
{
private
:
unsigned
char
*
m_pBuffer;
size_t m_BufferLength;
size_t m_DataStart;
size_t m_DataSize;
public
:
CStreamPacket() : m_BufferLength(
0
), m_DataStart(
0
), m_DataSize(
0
)
{
m_pBuffer
=
new
unsigned
char
[c_BufferBlockSize];
m_BufferLength
=
c_BufferBlockSize;
}
~
CStreamPacket()
{ delete[]m_pBuffer; }
private
:
bool
ResizeBuffer()
{
size_t size
=
m_BufferLength
<<
1
;
unsigned
char
*
tmp
=
new
unsigned
char
[size];
unsigned
char
*
tmp2;
memcpy(tmp,m_pBuffer
+
m_DataStart,m_DataSize);
tmp2
=
m_pBuffer;
m_pBuffer
=
tmp;
delete[]tmp2;
m_DataStart
=
0
;
m_BufferLength
=
size;
return
true
;
}
bool
RecomposeBuffer()
{
if
(m_DataStart
>
0
)
{
memcpy(m_pBuffer,m_pBuffer
+
m_DataStart,m_DataSize);
m_DataStart
=
0
;
return
true
;
}
return
false
;
}
public
:
//
从缓冲中取一个变量
//
可以是基本数据类型 也可以是struct
//
但不能为数组 否则不能正常取值
template
<
class
T
>
CStreamPacket
&
operator
>>
( T
&
Data )
{
size_t Size
=
sizeof
(T);
Data
=*
((T
*
)(m_pBuffer
+
m_DataStart));
m_DataStart
+=
Size;
m_DataSize
-=
Size;
return
*
this
;
}
//
从缓冲中取一个0结尾数组
//
如C字符串
template
<
class
T
>
CStreamPacket
&
operator
>>
( T Data[] )
{
size_t Size
=
sizeof
(T);
size_t i
=
0
;
while
(
true
)
{
operator
>>
(Data[i]);
if
(Data[i]
==
(T)
0
)
break
;
i
++
;
}
return
*
this
;
}
//
向缓冲中存一个变量
template
<
class
T
>
CStreamPacket
&
operator
<<
(
const
T
&
Data )
{
size_t Size
=
sizeof
(T);
while
(m_DataSize
+
m_DataStart
+
Size
>
m_BufferLength)
//
不能直接内存copy
{
if
(m_DataSize
+
Size
>
m_BufferLength)
//
缓冲大小不够
{
ResizeBuffer();
//
扩大
}
else
{
RecomposeBuffer();
//
重组
}
}
*
((T
*
)(m_pBuffer
+
m_DataStart
+
m_DataSize))
=
Data;
m_DataSize
+=
Size;
return
*
this
;
}
//
向缓冲中存一个0结尾的数组
//
如C字符串
template
<
class
T
>
CStreamPacket
&
operator
<<
( T Data[] )
{
size_t i
=
0
;
while
(
true
)
{
operator
<<
(Data[i]);
if
(Data[i]
==
(T)
0
)
break
;
i
++
;
}
return
*
this
;
}
//
来自另外一个CStreamPacket
CStreamPacket
&
operator
<<
(
const
CStreamPacket
&
Packet )
{
size_t Size
=
Packet.m_DataSize;
while
(m_DataSize
+
m_DataStart
+
Size
>
m_BufferLength)
//
不能直接内存copy
{
if
(m_DataSize
+
Size
>
m_BufferLength)
//
缓冲大小不够
{
ResizeBuffer();
//
扩大
}
else
{
RecomposeBuffer();
//
重组
}
}
memcpy(m_pBuffer
+
m_DataStart
+
m_DataSize,Packet.m_pBuffer
+
Packet.m_DataStart,Packet.m_DataSize);
m_DataSize
+=
Size;
return
*
this
;
}
size_t GetSize()
{
return
m_DataSize;
}
void
*
GetBuffer()
{
return
m_pBuffer
+
m_DataStart;
}
}
;
//
BUFFER.cpp : 定义控制台应用程序的入口点。
//
#include
"
stdafx.h
"
#include
"
.\buffer.h
"
#include
<
windows.h
>
using
namespace
std;
struct
testStruct
{
char
name[
10
];
long
age;
float
ff;
bool
sex;
}
;
int
_tmain(
int
argc, _TCHAR
*
argv[])
{
//
CBuffer buf1;
//
buf1<<"Hello World!"<<L"我是中国人!!";
//
buf1<<"1234567890";
//
buf1<<(unsigned char)0x12;
//
buf1<<(unsigned short)0x5634;
//
buf1<<(unsigned long)0x34129078;
//
testStruct ss;
//
strcpy(ss.name,"ss.name");
//
ss.age=0x86AE;
//
ss.ff=3.;
//
ss.sex=true;
//
buf1<<ss;
//
CBuffer buf2;
//
long double ll,jj=3.141592653589793;
//
long xx,yy=123456789;
//
buf2<<jj;
//
buf2<<yy;
//
buf2>>ll;
//
buf2>>xx;
CStreamPacket buf3;
#define
MB_COUNT (0x100000)
#define
MB_SIZE (0x400)
char
*
pp
=
new
char
[MB_SIZE];
char
*
pp2
=
new
char
[MB_SIZE];
memset(pp,
'
#
'
,MB_SIZE);
pp[MB_SIZE
-
1
]
=
(
char
)
0
;
DWORD t1,t2;
cout
<<
"
块大小
"
<<
MB_SIZE
<<
"
,测试次数
"
<<
MB_COUNT
<<
endl;;
cout
<<
"
开始...
"
;
t1
=
GetTickCount();
for
(
int
ii
=
0
;ii
<
MB_COUNT;ii
++
)
{
buf3
<<
pp;
//
cout<<"buf3.GetSize()="<<buf3.GetSize()<<endl;
buf3
>>
pp2;
//
cout<<"buf3.GetSize()="<<buf3.GetSize()<<endl;
}
t2
=
GetTickCount()
-
t1;
cout
<<
"
完成!
"
<<
endl;
buf3
<<
pp;
cout
<<
(
char
*
)buf3.GetBuffer()
<<
endl;
delete[]pp;
delete[]pp2;
//
cout<<t2<<endl;
//
cout<<(MB_SIZE*MB_COUNT)/(t2)<<" byte/ms"<<endl;
cout
<<
"
处理
"
<<
MB_SIZE
*
MB_COUNT
<<
"
字节,耗时
"
<<
t2
<<
"
毫秒!速度
"
<<
(MB_SIZE
*
MB_COUNT)
/
(t2)
<<
"
字节每毫秒
"
<<
endl;
system(
"
pause
"
);
return
0
;
}
posted on 2007-04-23 23:44
shaker(太子)
阅读(1163)
评论(3)
编辑
收藏
引用
所属分类:
C++
Feedback
#
re: 以前写的一个网络流封包类
2007-04-24 01:07
饭中淹
稍微...有个BUG...
析出的时候没有判断是否超出边界...
回复
更多评论
#
re: 以前写的一个网络流封包类
2007-05-26 23:08
To Be C++
@饭中淹
e..... 发现了
回复
更多评论
#
re: 以前写的一个网络流封包类
2007-07-11 13:03
幸福的耗子
1楼还真细心~
-_-////
回复
更多评论
刷新评论列表
标题
姓名
主页
验证码
*
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
BCGSoft announces that BCGControlBar Pro for MFC version 10.0 is available!
BCGControlBar Library Professional Edition v9.56
[ZT]C++ Boost Thread 编程指南
C++Builder2007 安装办法
[图书]使用wxWidgets进行跨平台程序开发
发一个mir2的内挂代码
使用boost::signals连接类成员函数
write a simple os with asm&c
以前写的一个网络流封包类
用boost::regex来做词法分析
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子技术博客
Powered by:
C++博客
Copyright © shaker(太子)