Boost logo

Boost Users :

Subject: [Boost-users] sending struct of int from Linux to Windows using boost::asio
From: A.Agrawal_at_[hidden]
Date: 2009-09-09 22:50:59


Hello All,

I am having trouble using boost:asio to send a simple struct
message_header from server (linux) to the client (windows).

typedef struct MessageHeader
{
  uint32_t _data_length; //length of data attached
  uint8_t _message_type; //MESSAGE_TYPE
  uint8_t _segment_name; //SEGMENT_NAME
  uint16_t _request_id; //Request Id assigned by the client
to the request to uniquely identify the request
  uint16_t _count_of_records; //Number of records affected by the
operation, 0 means complete segment is affected.
} MessageHeader;

typedef struct Message
{
   boost::array<char, header_length> _header_array;
} Message

Server side code (Linux):
===============
      MessageHeader request_header;
      request_header._data_length = 0;
      request_header._message_type = MSG_READ;
      request_header._segment_name = SEG_OOW;
      request_header._count_of_records = 0;
      request_header._request_id = 100;

      string _data_serialized = "";

      uint8_t header[header_length]; //header_length is defined as 10
      memcpy(header, (uint8_t*)(&(request_header)), header_length);
      std::vector<boost::asio::const_buffer> buffers;
      buffers.push_back(boost::asio::buffer(header, header_length));
      buffers.push_back(boost::asio::buffer((_data_serialized).c_str(),
_data_serialized.length()));
      boost::asio::async_write(_socket, buffers,
boost::bind(&ClientSession::handle_write, shared_from_this(),
boost::asio::placeholders::error));

Client Side code (Windows):
================

Message _read_message;
MessageHeader _message_header;

Handle_connect(....)
{
        boost::asio::async_read(_socket,
boost::asio::buffer(_read_msg._header_array, header_length),
boost::bind(&DJClient::Handle_read_header, this,
boost::asio::placeholders::error));
}

Handle_read_header(...)
{
        memcpy(&_message_header, read_msg._header_array.data(),
header_length);
}

Surprisingly the same code works fine from "Windows to Windows" and
"Windows to linux" but has problem when used on "Linux to Windows". When
sent from Linux server, Windows server receives garbage data. Sending of
normal ASCII characters from Linux to Windows work fine. Please help if
anyone can.

Thanks and Regards,
Anil Agrawal



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net