如何判断插座是否已连接?

时间:2013-12-10 02:32:28

标签: sockets automated-tests loadrunner

我正在使用HP Loadrunner来测试套接字协议程序,现在我将一些十六进制数字系统发送到服务器,但我不知道判断套接字是否已连接,我将我的脚本粘贴到此处< / p>

#define _EOF '#'
#include "lrs.h"

Action()
{
 char *recvbuf;
 int recvlen=0;
 int rc;
 lr_think_time(1000);
 lr_start_transaction("Trans_socket");
 lrs_set_recv_timeout (1,500);
 lr_start_transaction("Conn_socket");


 rc = lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=192.168.10.110:10001", LrsLastArg);  

 lr_output_message("rc=%d",rc);

    if (rc != 0 ) 
{
    lr_end_transaction("Conn_socket", LR_FAIL);
    lr_end_transaction("Trans_socket", LR_FAIL);
    return 0;
}
    lr_end_transaction("Conn_socket", LR_PASS);  

    lr_rendezvous("trace");

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

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

    lrs_get_last_received_buffer ("socket0",&recvbuf,&recvlen);

 if(recvlen==58)
     lr_end_transaction("Trans_socket", LR_PASS);
 else
     lr_end_transaction ("Trans_socket", LR_FAIL);

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

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

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

lrs_receive("socket0", "buf5", LrsLastArg);
lr_think_time(100);

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

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

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

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

lrs_close_socket("socket0");

return 0;

}

2 个答案:

答案 0 :(得分:1)

  

,但我不知道判断套接字是否已连接

是时候聘请一位曾经去过那里的插座程序员。

从loadrunner角度来看,您的代码中也有一些非常奇怪的约定。在等待代码中的服务器响应时,您似乎将用户思考时间视为延迟,这表明使用该工具时存在概念问题。您使用集合点是其常见用途中模型违规的关键指标,其中该工具用于打破最终用户在不同时间点到达和离开的混乱性质。

答案 1 :(得分:0)

您可以执行以下操作:

  1. 启用错误继续
  2. 检查套接字属性
  3. 在出错时停用继续
  4. 例如

    char* peer;
    lr_continue_on_error(1);
    lrs_create_socket("socket1", "TCP", "LocalHost=0", "RemoteHost=fakehost",  LrsLastArg);
    peer =lrs_get_socket_attrib("socket1", REMOTE_ADDRESS );
    if (peer == NULL){
        lr_message("Not connected");
    }else{
        lr_message("Connected");
    }
    
    lr_continue_on_error(0);