51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 6197|回复: 13
打印 上一主题 下一主题

[原创] Socket不能关闭

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-8-22 18:13:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
莫名真的很奇妙

脚本如下:

Action()
{
        buf2=lr_eval_string("<iq id=\"jcl_1\" type=\"get\"><query xmlns=\"jabber:iq:auth\"><username>{Login_Name}</username></query></iq>");

        buf6b=lr_eval_string("<iq id=\"jcl_2\" type=\"set\"><query xmlns=\"jabber:iq:auth\"><username>{Login_Name}</username><resource>CTCQ</resource><compcode>81</compcode><password>");

        buf6a="</password></query></iq>";

        digest="670b14728ad9902aecba32e22fa4f6bd";

        lr_output_message("Login_Name=%s",lr_eval_string("{Login_Name}"));

        lr_output_message("This turn Port is %s",lr_eval_string("{Port}"));

        lrs_create_socket("socket0", "TCP", "RemoteHost=10.80.12.137:5222", LrsLastArg);

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

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

        buf=lrs_get_received_buffer ("socket0", 0, -1, NULL);

        lr_output_message("buf1 is %s",buf);

        strcpy(buf,buf2);

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

        lr_output_message("buf2 is %s",buf);

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

        buf=lrs_get_received_buffer("socket0",0, -1, NULL);       

        lr_output_message("buf3 is %s",buf);

        strcpy(buf,buf6b);

        strcat(buf,digest);

        strcat(buf,buf6a);

        lr_output_message("buf6 send ID is %d",lrs_set_send_buffer("socket0",buf,strlen(buf)));

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

        lr_output_message("buf6 is %s",buf);

        lrs_free_buffer(buf);

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

        buf=lrs_get_received_buffer("socket0",0, -1, NULL);       

        lr_output_message("buf7 is %s",buf);

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

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

        lr_think_time(30);

        return 0;
}
这是一个CS架构的类似QQ的软件,模拟登录过程,登录成功后发送一个包buf29给一个用户但这不是问题的重点。
运行一次没问题,迭代数目为2或者2以上就会报错,我以为应该是socket链接没有在运行完一次后关闭导致,所以我想在脚本结束之前关闭socket,下次迭代的时候再重新建立一个socket就应该没问题了。
可是我在最后面加上一句话lrs_close_socket("socket0");在runtime中设置迭代次数为2,结果运行到第二次的时候就报错了,错误日志如下:
Action.c(191): lrs_close_socket(socket0)
Action.c(191): Error: An exception was raised while calling invocation function in interpreter extension cciext.dll: System Exceptions: EXCEPTION_ACCESS_VIOLATION.
Error: An exception was raised while calling action_logic_call_vuser_run function in extension runlogic.dll: System Exceptions: EXCEPTION_ACCESS_VIOLATION.
Ending Vuser...

各位高手帮帮忙,谢谢大家!
不懂啊,为什么就不能加上这句代码呢?socket怎么才能关闭呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2007-8-23 09:33:09 | 只看该作者
兄弟们,没人能解决这个问题么?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-8-23 09:36:34 | 只看该作者
如果你第一次关闭,没有问题;
第2次也应该没有问题的, 你在关闭前设置一个断点调试下;

一般的错误可能是第2次连接出先问题....你能不能在把问题的特征描述的清楚些
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-8-23 09:45:32 | 只看该作者
再描述一下特征:

第一次连接之后,发送登录数据包,成功,发送消息数据包,别的客户端能收到该包,
这样证明第一次登录以及发包都是成功的了,
但是在脚本的最后不能添加结束socket的代码否则程序无法compile通过,
这个样子去继续下一个迭代,
我在第二次迭代中加入一些调试代码,
结果发现服务器送来的包却是第一次迭代时应该发送的包,
比如说第一次迭代我用的用户是张三,第二次迭代用户是李四,结果第二次迭代收到的包还是发给名字叫张三的这个用户的,所以我就觉得是第一次迭代的socket没关闭造成的,所以我想添加结束socket的代码,但是添加这个代码程序会报错就是上面写到的错误。

请大家再帮忙分析一下,为什么一个socket会因为什么样的原因不能关闭?
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-8-23 12:31:12 | 只看该作者
这个问题没有解决我是不会让它沉掉的,
这么专业的论坛是不可能解决不了这个问题的。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-8-23 12:43:26 | 只看该作者
我的没有问题,是否和你的服务器的socket连接有关。
Action()
{
         lrs_create_socket("socket0", "TCP", "RemoteHost=appsvr01:8080", LrsLastArg);
         lr_think_time(1);
         lr_message("Hello World!");
                 lrs_close_socket("socket0");
        return 0;
}
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-8-23 12:45:59 | 只看该作者
另外你在什么地方进行登录和退出操作的?不是在init和end部分吧?
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2007-8-23 14:27:48 | 只看该作者
所有的脚本都在Action里面,创建socket也在里面,发送登录和退出的数据包也在里面,最后面我想加上关闭socket的代码就出错,

大家遇到过类似的问题么?有没有遇到过socket不能关闭的情况?
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2007-8-23 15:36:34 | 只看该作者
又要沉了

很多疑问都是无声无息的沉下去了

我们不解决问题就没办法真正学到知识

不要碰到问题绕过去

我不能让这个帖子沉了!
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2007-10-11 10:17:44 | 只看该作者
up
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    11#
    发表于 2008-10-16 08:57:42 | 只看该作者

    我也遇到了:

    Action.c(3): Error: An exception was raised while calling invocation function in interpreter extension cciext.dll: System Exceptions: Uknown.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2008-10-16 10:22:14 | 只看该作者
    期待问题的解决···帮楼主顶一下!不要沉了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2008-10-30 09:47:45 | 只看该作者
    你用进程而不是线程来运行脚本试下吧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2008-11-1 15:08:48 | 只看该作者
    顶一下
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-20 09:35 , Processed in 0.069246 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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