首页 文章

用于机器人服务器的TCP简单客户端 . 不发送数据

提问于
浏览
-1

我正在编写一个简单的TCP客户端,以便我可以连接到UR(通用机器人)机器人,并将消息(弹出XXXX)发送到端口号29999,以在UR屏幕中生成弹出消息 . UR服务器在连接时没有正确响应gethostbyaddr gethostbyname函数,因此,为了测试,我直接连接到IP和端口 . 简单TCP客户端的代码如下:

int initTCPSocket(void)
{
    struct in_addr ip;
    struct hostent *server;

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
    { 
        printf("ERROR opening socket");
        return -1;
    }
    portno = atoi(serverPort.c_str());

    if (!inet_aton(serverIP.c_str(), &ip))
        printf(" ERROR: error parsing IP address %s", serverIP.c_str());
    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = htons(ip.s_addr);
    serv_addr.sin_port = htons(portno);
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
    {
        printf("ERROR connecting to server");
        return -3;
    }
    else
        printf("Connected to server");
}

实际发送数据的代码是:

bool SendDataTCP (tekniker_tcp_comms::SendDataTCP::Request &req, tekniker_tcp_comms::SendDataTCP::Response &res)
{
    if (sockfd < 0)
    {
        ROS_INFO("ERROR in connection");
        res.dataSent=false;
        return true;
    }

    size_t msgLength = req.msg.data.length();
    //write to connected server.
    int n = write(sockfd, req.msg.data.c_str(),(int)msgLength);
    if (n < 0) 
    {
        ROS_INFO("ERROR writing to socket");
        res.dataSent=false;
    }
    else
    {
        ROS_INFO("write %d bytes. Message %s",n, req.msg.data.c_str());
        res.dataSent=true;
    }
    return true;
}

我获得正确连接的消息,我可以调用服务,并且写入功能正常,但是,UR中没有弹出窗口 . 看来UR没有正确收到消息 . 使用ncat(ncat 172.16.205.2 29999)连接到UR服务器以获取弹出消息并手动发送消息可以正常工作 .

调试几个小时后,我找不到任何导致此问题的原因 . 我会非常感谢任何建议,

先感谢您,

1 回答

  • 0

    插入Wireshark以监控TCP / IP后,问题出在LF终止字符上,但未正确发送 . 解决此问题客户端已正常工作 .

相关问题