Hi Ricardo, You might want to take a closer look here http://noxrepo.org/~yapkke/doc/classvigil_1_1messenger.html http://noxrepo.org/~yapkke/doc/structvigil_1_1messenger__msg.html
The struct messenger_msg is defined in messenger.hh as (and not what you presented in the email). struct messenger_msg { /** Length of message, including this header. */ uint16_t length; /** Type of message, as defined in \ref msg_type. */ uint8_t type; /** Reference to body of message. */ uint8_t body[0]; } __attribute__ ((packed)); Your packet length does seems way off to me at 512. The packet sent is not conforming to the expectation. Hope this helps. Regards KK On 25 June 2011 13:26, Ricardo Bennesby <ricardo.benne...@gmail.com> wrote: > Hi. Thanks for reply, KK. > > I am using the struct messenger_msg of messenger component: > > struct messenger_msg > { > uint16_t length; > uint8_t type; > string body; > } __attribute__ ((packed)); > > So, I declare and set the fields in my component: > > messenger_msg mymsg; > mymsg.type = 0x0A; > mymsg.body.append("Test"); > mymsg.length = (sizeof(messenger_msg)); > > And the other part of the client (using socket): > > int Mysocket, numbytes; > char buf[MAXDATASIZE]; > struct hostent *he; > struct sockaddr_in seu_endereco; > > if ((he=gethostbyname("localhost")) == NULL) /* send host info */ > { > herror("gethostbyname"); > exit(1); > } > > seu_endereco.sin_family = AF_INET; > seu_endereco.sin_port = htons(PORTA); > seu_endereco.sin_addr = *((struct in_addr *)he->h_addr); > bzero(&(seu_endereco.sin_zero), 8); > > if (send(Mysocket, &mymsg, mymsg.length, 0) == -1) { > perror("send"); > close(Mysocket); > exit(0); > } > > Where PORTA==2603; > > But when I run it, the server client (messenger) prints: > > 00077|messenger_core|DBG:Copy 8 bytes to message > 00078|messenger|DBG:Check message completeness 512 (expected 512) > 00079|messenger_core|DBG:Received packet of length 512 > 00080|messenger|DBG:Message posted as Msg_event > 00081|messenger|DBG:Received packet of length 512 > 00082|messenger_core|DBG:Copy 2 bytes to message > 00083|messenger|DBG:Check message completeness 2 (expected 62559) > 00084|messenger_core|DBG:Copy 502 bytes to message > 00085|messenger|DBG:Check message completeness 504 (expected 62559) > 00086|messenger|DBG:me.msg->length: 512 and sizeof(messenger_msg)+1: 9 > 00087|messenger|DBG:Received string ��Q� > > The string "Test" is not printed. It shows ��Q� instead. What am I doing > wrong? Is it the length of the message that I am setting doing mymsg.length > = (sizeof(messenger_msg)); ? Or in the way I am using socket send function > in client (send(Mysocket, &mymsg, mymsg.length, 0)) ? > > Thanks for help. > > Best Regards. > > 2011/6/18 kk yap <yap...@stanford.edu> >> >> Hi Ricardo, >> >> You might want to add a length and type in front of the string. :) >> >> Regards >> KK >> >> On 18 June 2011 14:46, Ricardo Bennesby <ricardo.benne...@gmail.com> >> wrote: >> > Hi. >> > >> > I am writing component in C++ that uses messenger component. >> > >> > I have a client function that send a string to the own component. As >> > follows: >> > >> > void comp::sendMessageOtherAs(){ >> > ClientSocket theSocket ("localhost", 2603 ); >> > string request; >> > request = "Test"; >> > theSocket << request << "\n"; >> > lg.dbg("Echo sent"); >> > } >> > >> > The server part is did by messenger component, calling the >> > handle_message >> > function; >> > >> > But the result, when the handle_message is invoked is: >> > >> > 00108|messenger_core|DBG:Starting connection with idleInterval 0 >> > 00109|messenger_core|DBG:Received packet of length 0 >> > 00110|messenger|DBG:Message posted as Msg_event >> > 00111|messenger_core|DBG:TCP socket connection accepted >> > 00112|messenger_core|DBG:Copy 2 bytes to message >> > 00113|messenger|DBG:Check message completeness 2 (expected 21349) >> > 00114|messenger_core|DBG:Copy 31 bytes to message >> > 00115|messenger|DBG:Check message completeness 33 (expected 21349) >> > 00116|messenger_core|DBG:Received packet of length 3 >> > 00117|messenger_core|DBG:Received disconnection request >> > 00118|messenger|DBG:Message posted as Msg_event >> > 00119|messenger_core|DBG:socket closed >> > >> > And the handler messenger has the code: >> > >> > switch (me.msg->type) >> > { >> > case MSG_DISCONNECT: >> > return STOP; >> > break; >> > case MSG_ECHO: >> > VLOG_DBG(lg, "Got echo request"); >> > reply_echo(me); >> > return STOP; >> > break; >> > case MSG_ECHO_RESPONSE: >> > VLOG_DBG(lg, "Echo reply received"); >> > return STOP; >> > break; >> > case MSG_NOX_STR_CMD: >> > char mstring[ntohs(me.msg->length)-sizeof(messenger_msg)+1]; >> > memcpy(mstring, me.msg->body, >> > ntohs(me.msg->length)-sizeof(messenger_msg)); >> > mstring[ntohs(me.msg->length)-sizeof(messenger_msg)] = '\0'; >> > VLOG_DBG(lg, "Received string %s", mstring); >> > break; >> > } >> > >> > Shouldn't the message be of MSG_NOX_STR_CMD type and prints the string >> > sent? >> > Or the way I am sending the string is wrong? >> > >> > Sorry if I did'n made me clear. >> > Thanks for help. >> > Regards. >> > >> > -- >> > Ricardo Bennesby da Silva >> > Ciência da Computação - UFAM >> > LabCIA - Laboratório de Computação Inteligente e Autônoma >> > >> > >> > _______________________________________________ >> > nox-dev mailing list >> > nox-dev@noxrepo.org >> > http://noxrepo.org/mailman/listinfo/nox-dev >> > >> > > > > > -- > Ricardo Bennesby da Silva > Ciência da Computação - UFAM > LabCIA - Laboratório de Computação Inteligente e Autônoma > > _______________________________________________ nox-dev mailing list nox-dev@noxrepo.org http://noxrepo.org/mailman/listinfo/nox-dev