OROCOS_TCPRport 测试

 

测试修改代码 需要修改代码tcp 通信不友好

bool TcpReporting::configureHook(){
        port=port_prop.value();
          log(Error) << "is TcpReporting ..............";
        return true;
    }

    bool TcpReporting::startHook()
    {
        this->configureHook();
        RTT::Logger::In in("TcpReporting::startup");
        fbody = new RTT::SocketMarshaller(this);
        this->addMarshaller( 0, fbody );
        ListenThread::createInstance( fbody, port );
        return ReportingComponent::startHook();
    }

 数据处理端 就是一个while 循环 需改改的地方

   void Datasender::loop()
    {
        *os << "100 Orocos 1.0 TcpReporting Server 1.0" << std::endl;
        while( os->isValid() )
        {
            interpreter->process();
        }
        Logger::log() << Logger::Info << "Connection closed!" << Logger::endl;
    }

测试端代码 

#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <string.h>
 
#define SERVER_PORT_NUM 3142
#define SERVER_IP_ADDR "127.0.0.1"
#define ERROR -1
#define OK    0
 
int tcpOpen(char *  serverName     /* name or IP address of server */,
        int serverPort /* port */);
void tcpClose(int fd);
void tcpWrite(int fd, const char* cmd);
char* tcpRead(int fd);
 
 
int main()
{
    char *str;
    int sockFd = tcpOpen(SERVER_IP_ADDR, SERVER_PORT_NUM);
    //tcpClose(sockFd);
    //tcpWrite(sockFd, "This is a test");
   while(1){
    tcpWrite(sockFd, "This is a test");
    str = tcpRead(sockFd);
    printf("==%s\n",str);
    free(str);
    sleep(1); 
   }
    return 0;
}
 
 
int tcpOpen(char *  serverName     /* name or IP address of server */,
        int serverPort)
{
    struct sockaddr_in  serverAddr;    /* server's socket address */
    int                 sockAddrSize;  /* size of socket address structure */
    int                 sFd;           /* socket file descriptor */
    int                 n;
    int addr1, addr2, addr3, addr4;
    unsigned int       ipaddr;
 
    sscanf(serverName, "%d.%d.%d.%d", &addr1, &addr2, &addr3, &addr4);
    ipaddr = ((addr1<<24) & 0xFF000000) |
        ((addr2<<16) & 0x00FF0000) |
        ((addr3<<8)  & 0x0000FF00) |
        (addr4 & 0x000000FF);
    printf("Server: ipaddr[0x%08x], port:[%d]\n", ipaddr, SERVER_PORT_NUM);
 
    /* create client's socket */
    if ((sFd = socket (AF_INET, SOCK_STREAM, 0)) == ERROR)
    {
        perror ("socket");
        return (ERROR);
    }
 
    /* bind not required - port number is dynamic */
    /* build server socket address */
 
    sockAddrSize = sizeof (struct sockaddr_in);
    bzero ((char *) &serverAddr, sockAddrSize);
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = htonl(ipaddr);
    serverAddr.sin_port = htons (SERVER_PORT_NUM);
 
    /* connect to server */
 
    if (connect (sFd, (struct sockaddr *) &serverAddr, sockAddrSize) == ERROR)
    {
        printf("connect error!\n");
        close (sFd);
        return (ERROR);
    }
    printf("Connect to Server successfully!\n");
    return sFd;
}
 
 
void tcpClose(int fd)
{
    close(fd);
}
 
 
void tcpWrite(int fd, const char* cmd)
{
    if (write(fd, cmd, strlen(cmd)) < 0 ||
            (write(fd, "\n", 1) < 0))
    {
        printf("ERROR: tcpWrite() '%s'\n", cmd);
    }
    printf("tcp write successfully!\n");
}
 
char* tcpRead(int fd)
{
    char *str = malloc(2000);
    char *pos;
 
    if (read(fd, str, 2000) <= 0)
    {
        printf("ERROR: tcpRead()\n");
    }
 
    if ((pos = strstr(str, "\n")) != NULL)
    {
        *pos = '\0';
    }
    printf("tcp read: [%s] successfully\n", str);
    return str;
}
 
 
 

测试脚本:tcpReporting好好分析

displayComponentTypes
displayComponentTypes
loadComponent("Reporter","OCL::TcpReporting")
setActivity("Reporter",0.01,LowestPriority,ORO_SCHED_RT)
cd Reporter
start
displayComponentTypes
loadComponent("Reporter","OCL::FileReporting")
setActivity("Reporter",0.01,LowestPriority,ORO_SCHED_RT)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值