Есть windows-приложение, с которым мне нужно общаться из джава. Каких-то встроенных возможностей для коммуникации в нем не предусмотрено, но есть возможность загуржать пользовательскую dll, чем я и воспользовался. Написал свою dll на c++ и из нее коннекчусь к своему java-серверу. В сях я нуб, по этому сильно не заморачивался, нашел готовую реализацию сокета http://www.adp-gmbh.ch/win/misc/sockets.html и вроде пока все получается. Строки передаются и принимаются без проблем. Но одними строками сыт не будешь. Мне надо из этой dll в джава передать вот такую структуру:
| Код | struct holdem_player{ char m_name[16] ; double m_balance ; double m_currentbet ; unsigned char m_cards[2] ; unsigned char m_name_known : 1 ; unsigned char m_balance_known : 1 ; unsigned char m_fillerbits : 6 ; unsigned char m_fillerbyte ; };
struct holdem_state{ char m_title[64] ; double m_pot[10] ; unsigned char m_cards[5] ; unsigned char m_is_playing : 1 ; unsigned char m_is_posting : 1 ; unsigned char m_fillerbits : 6 ; unsigned char m_fillerbyte ; unsigned char m_dealer_chair ; holdem_player m_player[10] ; };
|
Как это правильнее (и просто, если это применимо к си ) сделать? Еще меня настораживает один момент. Как-то странно выглядит функция для отправки байтов:
| Код | // метод отправки строки, работает void Socket::SendLine(std::string s) { s += '\n'; send(s_,s.c_str(),s.length(),0); } // вроде для отправки байт, но опчему-то обьявлен как string, и не особо отличается от SendLine // это нормально? void Socket::SendBytes(const std::string& s) { send(s_,s.c_str(),s.length(),0); }
|
Как мне отправлять такие данные в в этот метод, и как их потом использовать в джава? |