51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4270|回复: 10
打印 上一主题 下一主题

求助:WinSock脚本因动态分配连接端口号而导致回放出错的问题!

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2005-1-10 10:30:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用WinSock协议对登陆、注销一网站的操作录制脚本,网站在局域网之内;
脚本中有一语句是连接局域网网关服务器,连接的端口号是动态分配的,
lrs_create_socket("socket1", "TCP", "LocalHost=0",
"RemoteHost=XSERVER:3651", LrsLastArg);

这样回放脚本时总会报错,
vuser_init.c(14): Error : callConnect - Connection refused. Error code :10061.
vuser_init.c(14): Error : Timeout expired while trying to connect. Error  
                                 code : 9017.

请问错误是动态分配端口号造成的吗?应如何修改脚本,才能解决这一问题?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏

该用户从未签到

2#
 楼主| 发表于 2005-1-10 13:50:56 | 只看该作者
连接时只有这一条语句,所以我想这个端口号是在连接时随机生成的,而不是由服务器分配给的。这样好像也无法用函数取得分配的值,再参数化。应如何解决呢?还是说出错的原因不在此?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2005-1-10 14:49:48 | 只看该作者
是不是需要在语句前插入一段随机生成端口号的代码,然后进行关联?
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2005-1-13 14:29:50 | 只看该作者
loadrunner里面有一个lrs_save_param函数可以把收到的包中的内容的一部分转化为参数变量,就可以替换调了
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2005-1-13 15:40:00 | 只看该作者
谢谢 rsongzh,不过我这个不是参数化的问题。
我这儿的端口号是连接网关服务器时随即产生的,不是服务器分配的。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2005-1-17 10:55:04 | 只看该作者

关注中

极度关注……
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2005-1-17 11:52:28 | 只看该作者
你的系统的访问端口怎么会是随机的呢?难道你的系统在服务器上的所有端口进行轮巡吗?客户端自己说一个端口,服务器就认吗?
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2005-1-17 12:56:26 | 只看该作者
我想应该是这样,因为脚本中相关的语句只有这三条,
lrs_create_socket("socket1", "TCP", "LocalHost=0",
"RemoteHost=XSERVER:3651", LrsLastArg);
lrs_send("socket1", "buf1", LrsLastArg);
lrs_close_socket("socket1");

是我理解有误吗?如果是由服务器随机分配端口号,生成的语句应该不是这样的吧?

当开启浏览器连接内网或外网网站时,会与网关服务器建立一次连接,但跟以后的操作没有什么联系。我现在的解决办法是把这三条注释掉。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2005-1-18 10:50:56 | 只看该作者
lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=128.0.98.181:7456", LrsLastArg);

        lrs_send("socket0", "buf0", LrsLastArg);

        lrs_receive("socket0", "buf1", LrsLastArg);

        lrs_save_param("socket0", LRS_LAST_RECEIVED, "WSHPort", 534, 2);

        lrs_close_socket("socket0");

        port = lr_eval_string("<WSHPort>");

        lrs_hex_string_to_int(port, strlen(port), &i);

        sprintf(portString, "RemoteHost=128.0.98.181:%d", i);

        lrs_create_socket("socket1", "TCP", "LocalHost=0", portString, LrsLastArg);

在这个例子中,一共建立两个socket,第一个socket的端口是固定的,第二个socket的端口是从服务器之前返回的数据包buf1中(具体是534和535两个字节)获得的。

你应该先搞清楚那个动态的端口号是如何产生的,这样就好办了。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2005-1-18 10:59:49 | 只看该作者
我录制时勾选了“录制程序启动选项”,脚本中第一条和第二条语句是这两条,
lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=rd-center:80", LrsLastArg);

lrs_create_socket("socket1", "TCP", "LocalHost=0", "RemoteHost=XSERVER:3651", LrsLastArg);

第一条是跟Web应用服务器建立连接,端口号是固定的;第二条是跟网关服务器建立连接,端口号是随机的,而且不是从服务器返回的数据包中获得的。
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2005-1-18 11:32:02 | 只看该作者
这个端口是客户端自己决定的?服务器干吗?
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-26 22:51 , Processed in 0.092812 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表