Socket不能关闭
莫名真的很奇妙脚本如下:
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怎么才能关闭呢? 兄弟们,没人能解决这个问题么? 如果你第一次关闭,没有问题;
第2次也应该没有问题的, 你在关闭前设置一个断点调试下;
一般的错误可能是第2次连接出先问题....你能不能在把问题的特征描述的清楚些 再描述一下特征:
第一次连接之后,发送登录数据包,成功,发送消息数据包,别的客户端能收到该包,
这样证明第一次登录以及发包都是成功的了,
但是在脚本的最后不能添加结束socket的代码否则程序无法compile通过,
这个样子去继续下一个迭代,
我在第二次迭代中加入一些调试代码,
结果发现服务器送来的包却是第一次迭代时应该发送的包,
比如说第一次迭代我用的用户是张三,第二次迭代用户是李四,结果第二次迭代收到的包还是发给名字叫张三的这个用户的,所以我就觉得是第一次迭代的socket没关闭造成的,所以我想添加结束socket的代码,但是添加这个代码程序会报错就是上面写到的错误。
请大家再帮忙分析一下,为什么一个socket会因为什么样的原因不能关闭? 这个问题没有解决我是不会让它沉掉的,
这么专业的论坛是不可能解决不了这个问题的。 我的没有问题,是否和你的服务器的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;
} 另外你在什么地方进行登录和退出操作的?不是在init和end部分吧? 所有的脚本都在Action里面,创建socket也在里面,发送登录和退出的数据包也在里面,最后面我想加上关闭socket的代码就出错,
大家遇到过类似的问题么?有没有遇到过socket不能关闭的情况? 又要沉了
很多疑问都是无声无息的沉下去了
我们不解决问题就没办法真正学到知识
不要碰到问题绕过去
我不能让这个帖子沉了! up
我也遇到了:
Action.c(3): Error: An exception was raised while calling invocation function in interpreter extension cciext.dll: System Exceptions: Uknown. 期待问题的解决···帮楼主顶一下!不要沉了:lol 你用进程而不是线程来运行脚本试下吧 顶一下
页:
[1]