停止更新,敏捷测试及TestOps解决体系,关注订阅号TestOps

windows sockets函数下的一个关联全返回的解决方法

上一篇 / 下一篇  2010-02-08 13:43:54 / 个人分类:《性能测试进阶指南》专栏

51Testing软件测试网~T F ~zj3Y}P

windows sockets协议中我们会使用lrs_save_searched_sting()函数来关联符合一定左右边界的内容但它一个缺点,就是无法获得多个符合边界的返回并保存在参数数组中,在该函数中不能将序号关键字设置为ALL。我们可以通过自己编写一个函数来解决这个问题,函数代码如下。

aqN*W:e;{Y'vG n0

LP.i%W U:v _0splitchartoparamarr(char *x,char *y,char *paramarrname)51Testing软件测试网 }!frT9B'R

~ Cvs Eqq0//该函数的作用是将输入的字符串x,通过y符号分割,保存到paramarrname参数数组中

W4XY!rfet,i2l051Testing软件测试网)JTV7`+h7_$K

{

5i;~6i{`0

+B I%U)L+nz0    extern char * strtok(char * string, const char * delimiters );51Testing软件测试网:T0S-p(KZ{3_@.T

n^k5R]q RX0f2n3f0char charstring[1000],separators[100],paramname[110];51Testing软件测试网h%k/OEv8Z Y|b

|*]r.}6i d0//定义输入字符串,字符串长度为1000,分隔符长度为100,参数元素名长度11051Testing软件测试网+b3fO$EX#L w%^H:aJ(b

51Testing软件测试网3~ P~?;J4s

char * token;51Testing软件测试网*{Iw V]8i7f

Yk tu:}c9V"K]0    int i=0;//初始化计数器51Testing软件测试网O v$~AV

51Testing软件测试网*pKR'XGYi&}

    char paramcount[10],paramarrcount[110];

@^{1}VW2ry;|@0

8Y ox*G m0//定义生成参数数组的编号及参数名

l/w`2x'H?q1pi2O051Testing软件测试网zPY'N4hG

 

;sEL+~Uc-lon0

[ Ev%Dr:@(K#~ \3E yj0    strcpy(charstring,x);

I`:xg%l x;K051Testing软件测试网-nU6Q!Z4RS,D

    strcpy(separators,y);

z"z&qq]1s0

U1i+qh[EE KqT0 51Testing软件测试网'Wt5|L(\

x1A2} I7D2Z`H Cr0token = (char *)strtok(charstring, separators);51Testing软件测试网;m Q _#LGY

51Testing软件测试网'Uu"a7[OD

// Get the first token

|F rv p_/y;j]0

]7p%IOId } Z0 

%D:w,kDqU051Testing软件测试网 u @7_S2Z_? ^f5rE

if (!token) {51Testing软件测试网5nZ-NN i9fM

51Testing软件测试网Hw,D'RX

    lr_output_message ("No tokens found in string!");51Testing软件测试网!]x:U*ou mg

/{4ARI5D J0    return( -1 );51Testing软件测试网4{`"WJ*O&P~ B

51Testing软件测试网4C H8bQ!L@

    }51Testing软件测试网&K.Ag3|Y(z6\3l

51Testing软件测试网-z u,N]oFl

 

5HG,~ Y2Q:}vf0

Y2HL]8z0while (token != NULL ) { // While valid tokens are returned

2N"k"MZ$e051Testing软件测试网(t TmlU'{%v

 

#b*JhW.` ^Gm~w]0

G8SxokrW UP0//lr_output_message ("%s", token );//输入分割值51Testing软件测试网~G*ka.gSTF V

e?PF0W NN g3e0        i++;51Testing软件测试网V!]3of0Jkh5D

51Testing软件测试网+wS(WD:Sd;t#f

     sprintf(paramname,"%s_%d",paramarrname,i);

*U4yD4Rr$s.x,us0B9l051Testing软件测试网W!K4N4O:k{;|[fs

        //lr_output_message ("%s", paramname );//输出参数名51Testing软件测试网9Ti&^*uphc

o9H Y@@,G`0        lr_save_string(token,paramname);51Testing软件测试网N%Q,T!op}

L p3z dE!a C1O0 51Testing软件测试网$H-[`qUIN

~"Z*{*T.g9Gw0    token = (char *)strtok(NULL, separators); // Get the next token

O0]Ol8U,~b051Testing软件测试网n%uOqqH(Gj!D{cO

       51Testing软件测试网 v c!b?%t au8]n'F

51Testing软件测试网-q:hG|g V

    }

$A"z!K:e%J051Testing软件测试网2X}"i)XI3ji

    sprintf(paramarrcount,"%s_count",paramarrname);

{T|!f2i2vy0

m+u b'K/v)q0    itoa(i,paramcount,10);

.t kK Dl5l.n'kI0

K?*bAn}&oZ5]0    lr_save_string(paramcount,paramarrcount);

u._C9|*ADf:j0

r5kPHu0 

l'u ~WP4B e*X?@051Testing软件测试网hG#pL(L2c'm

}

W `&ou6X$~(X qmV)X0

6NU+AOJS:`/s8k2o0在代码中可以这样调用该函数:

)g[&G-K#x%g v0

SjNu*|R0[)h0Action()51Testing软件测试网]OiExJb

51Testing软件测试网ZqR:G f

{

8e'P7wt"m#jq.s2j0

B#j4W&r[!I7B0splitchartoparamarr("#A#B#C#D#","#","myarr");

p\.wM [6f e0

!D/B`5D%@7Z v+m ?0return 0;51Testing软件测试网'H3c?+\ N8Y

z9D8?i1`'Q#E)u^0}51Testing软件测试网.RA3K%hu.z\!j

51Testing软件测试网Z K#k3a,~

运行代码后可以看到以下结果:

u]'bIl%gF.b051Testing软件测试网'fQ R8l$U

vuser_init.c(30): Notify: Saving Parameter "myarr_1 = A"51Testing软件测试网6X ~,h C-Ut

51Testing软件测试网 Dx'qe8m O

vuser_init.c(30): Notify: Saving Parameter "myarr_2 = B"51Testing软件测试网6u"J8?$`(m9u

51Testing软件测试网7g:X)V Ma_2P

vuser_init.c(30): Notify: Saving Parameter "myarr_3 = C"

MMR$@_ r/a/y051Testing软件测试网2} r9pc*p o)k$^

vuser_init.c(30): Notify: Saving Parameter "myarr_4 = D"

y`GbN3S;KV051Testing软件测试网tE6P7a#Lh!W([

vuser_init.c(38): Notify: Saving Parameter "myarr_count = 4"51Testing软件测试网k*|[T O.n'R:M

Z6BocP*S0字符串“#A#B#C#D#”被按照#符号分离,并且分别被保存在参数名为myarr的参数数组中。51Testing软件测试网#A/Z2~^Ps@5?1T4p

LP+B@ G2I2R0有了这个splitchartoparamarr()函数,以后在Windows Sockets协议下我们可以实现关联返回多个相同边界并且保存为参数数组的功能了。

#v!k c? aE(@ ua}$d0

;t'_6I!M n$f.wZ0 51Testing软件测试网KU8n*Q%i8X

-O h&GA/X#GI kRuu0该段内容截取于《性能测试进阶指南》 windows sockets开发章节
&R&^7mG7@U0

D n/X2T9Z#Y,u051Testing软件测试网(C? TS)n2l

 

'^ mq\"r8g,o(i0

TAG:

云层专版 引用 删除 云层   /   2010-02-09 11:54:08
原帖由sweetxmy于2010-02-08 14:58:50发表
你写的单个字符的剪切,如果是一个字符串的剪切可以吗?

一样可以的,不过这里不能使用左右边界的写法,只能按照一个固定的分割字符串来做例如:
splitchartoparamarr("<a>test<a>bbb<a>","<a>","myarr");

这个串被分出来是 test 和 bbb
sweetxmy的个人空间(喜欢兔子的藏羚羊!) 引用 删除 sweetxmy   /   2010-02-08 14:58:50
你写的单个字符的剪切,如果是一个字符串的剪切可以吗?
 

评分:0

我来说两句

Open Toolbar