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

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

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

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

3tNWX)xN;T0

va/x$GDK2m5L~0splitchartoparamarr(char *x,char *y,char *paramarrname)

X]aOTa+Z4ki051Testing软件测试网L Zdt[d:be

//该函数的作用是将输入的字符串x,通过y符号分割,保存到paramarrname参数数组中51Testing软件测试网 t-WD5d4q2F

51Testing软件测试网!?5hK~ Ko"|V

{

.UG$\j {VCr051Testing软件测试网@7Fh#cJe

    extern char * strtok(char * string, const char * delimiters );

a/Yf#G4?iY{p)G051Testing软件测试网K tqh^8R:k

char charstring[1000],separators[100],paramname[110];51Testing软件测试网$C6A8be?`

51Testing软件测试网Qwi2T? N

//定义输入字符串,字符串长度为1000,分隔符长度为100,参数元素名长度110

Jw [LQ/o/z0

TQd0BTCfD0char * token;

B+qn4{$g!S0

.o3h7|^i0    int i=0;//初始化计数器51Testing软件测试网R8`0zL [t EYm~1|

e+[4z T)H-T#aN0    char paramcount[10],paramarrcount[110];

/d/c&s.Z.m;iy/`y0

2aTulo W8Hq'NT0//定义生成参数数组的编号及参数名

k Z,zt+L]'|DZ0I051Testing软件测试网 u}fQfpn

 51Testing软件测试网O"}k%?"FfHv4v

51Testing软件测试网.P2yrJ`v;Gg.X

    strcpy(charstring,x);

p;W*mIn"C6\a0

h"dU6`g.X6ME,g"d0    strcpy(separators,y);

kZnCj t.ls.z051Testing软件测试网8Fx$hX2S

 

D*G'o6Xijk0

] B&v7H#|0token = (char *)strtok(charstring, separators);

%z"gN2k0Z)zO051Testing软件测试网;PG)@ Z?-S'A^z

// Get the first token

\6mg]T7tA0

,Q f4Fhl$lT0 51Testing软件测试网` L}A\0}_:Y_2F

;M x{P7cKL0if (!token) {51Testing软件测试网 b xMmqf4n h z4r

C$vfl R0    lr_output_message ("No tokens found in string!");51Testing软件测试网U0L_6T%m#t1k1AWA

9Gg hE,K5aC)~.|.a$c0    return( -1 );51Testing软件测试网o&V+w*Q4GF

51Testing软件测试网:Ec m.z'v

    }

,ux'w8s5E qAjn051Testing软件测试网-A,xkOh;{

 51Testing软件测试网&@(b:Q,LR5eE4^

51Testing软件测试网 iU.{8Ej-FWEzb:Q

while (token != NULL ) { // While valid tokens are returned51Testing软件测试网F$@7\$a#C"A

8WYV8~ N{7g0 

\ uC6w-F3s2Z0

;xI9w0x n {^#x0//lr_output_message ("%s", token );//输入分割值

*g l4P8c,J-sj/U5J F'D1W0

T D\D@4|](^,ZG0        i++;

x~-X ]W Q)u051Testing软件测试网R+@e@9H*it1_+\

     sprintf(paramname,"%s_%d",paramarrname,i);51Testing软件测试网4M2QH)IQh~:_ `

51Testing软件测试网z{"iPx!p0^(u:gU{

        //lr_output_message ("%s", paramname );//输出参数名

p:H9D2J(I[+A0

o`/A7F Fb\ AN0        lr_save_string(token,paramname);

9j1Yt5F2hgi s051Testing软件测试网U!PG'xS*vO/v ~%]

 

Rbu7RB8Bxa0

!j~WC J7j ~0    token = (char *)strtok(NULL, separators); // Get the next token51Testing软件测试网h!Ncq8G r

!tuw%E:U0       

dU/U5@(] z?D4WO?K0

pQ ~y,W{0    }

e5c_5Q Tp+h2I6D;~0

c rrR:R?zj0    sprintf(paramarrcount,"%s_count",paramarrname);

5DP#Z5IN"h:M'h Y0

W Oc_t-W{ Z0    itoa(i,paramcount,10);

[&d!b8gg(Sp$q051Testing软件测试网7l"Of-`!d)PX

    lr_save_string(paramcount,paramarrcount);51Testing软件测试网K#~@-`[A#p

C+R:SV dju)z#V0 51Testing软件测试网8Yf Vj$^GL,LT&@t

%Ta,Jf%N&k.W0}51Testing软件测试网%wy L/Bf*c

51Testing软件测试网1{(s"[7b`G^*aM

在代码中可以这样调用该函数:51Testing软件测试网6|x Axn9G/L

51Testing软件测试网V\&T%c![t'nL{|6K

Action()

"r!Iy-h N%x0

u6R/Ye/O? E jDj0{

T P"_ A^-k0

%dLmek0splitchartoparamarr("#A#B#C#D#","#","myarr");51Testing软件测试网 e7RvP ?m

51Testing软件测试网,G l$u7X+r F5}

return 0;51Testing软件测试网t.Hy#f/E6M*p$L

(A`Fd:[R oX0}51Testing软件测试网qa/@YD'Ye(h}

51Testing软件测试网&h _2PD2C{c-w8D

运行代码后可以看到以下结果:51Testing软件测试网2TX,_e2tc

%\1u]|;P2x0vuser_init.c(30): Notify: Saving Parameter "myarr_1 = A"

x_T)yh8D-i_0

[z7J\al0vuser_init.c(30): Notify: Saving Parameter "myarr_2 = B"

+@V}3f's7l0

vqj`z/g[0vuser_init.c(30): Notify: Saving Parameter "myarr_3 = C"

/t r G3H3q;E iM0

'j x*N L8{'[w&_0vuser_init.c(30): Notify: Saving Parameter "myarr_4 = D"51Testing软件测试网wg7{Mar

51Testing软件测试网7zt W'I;j)En E,l1SE

vuser_init.c(38): Notify: Saving Parameter "myarr_count = 4"51Testing软件测试网M/P6mckc

L(w,g/Q!j0字符串“#A#B#C#D#”被按照#符号分离,并且分别被保存在参数名为myarr的参数数组中。

O#^ I RO&f051Testing软件测试网2h)niyq/T:S8K

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

0ux)p nI8M0

J ?WK,y?/Wk0 51Testing软件测试网1G9AG[LHj

0w6W.u.w}F6@xl0该段内容截取于《性能测试进阶指南》 windows sockets开发章节51Testing软件测试网q c#NoS#T+u
51Testing软件测试网$l0n/Z vL'__

51Testing软件测试网.Bn.B A3NV*] vD&]

 

6f(Wj ~"^F0

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