|
Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема
|
C structures <=> Java?
|
|
Автор | oncho (Нерегистриран) |
Публикувано | 24.08.05 01:15 |
|
С програмист съм, но искам да навляза и в други води. Пиша пробно приложение клиент-сървър при което сървърът е на С, а клиентът на Java. Комуникацията е по TCP. В сървъра съм си дефинирал примерна структура:
typedef struct my_h {
int flags;
char text[100];
} my_h;
Проблемът ми е че в С знам точно колко е голяма тази структура и съответно мога да я изпратя без проблем - бит по бит през TCP сокета. От другата страна обаче стои Java приложението, което не мога да се сетя лесен начин да получи същите данни в аналогичен вид. Единственото което ми идва през акъла е да parse-вам входа като стринг и от там вече да си вадя флага и текста, но това решение ми се струва много глупаво. Какви са по-добрите идеи?:-)
| |
Тема
|
Re: C structures <=> Java?
[re: oncho]
|
|
Автор | l (Нерегистриран) |
Публикувано | 24.08.05 05:22 |
|
Абе изобщо не съм сигурен, че знаеш колко ти е голяма структурата. :) Тя зависи от компилатора, платформата и още една камара неща. Да не говорим за big- и little-endian. Казано с други думи, този начин на програмиране изобщо не е преносим и препоръчителен.
Добрият начин е и от двете страни да имаш функции, които сериализират и десериализират структурите.
Иначе за конкретният проблем, четеш 104 байта, предполагаш какъв е endianess на компютъра на сървъра и сглобяваш от първите 4 int, а от останалите стринга.
| |
Тема
|
Re: C structures <=> Java?
[re: l]
|
|
Автор | oncho (Нерегистриран) |
Публикувано | 24.08.05 10:20 |
|
Знам колко ми е голяма структурата, защото указвам на компилатора да не align-ва :-)
За big и little endian да предположим че също знам :-)
| |
Тема
|
Re: C structures <=> Java?
[re: oncho]
|
|
Автор |
DrmR (глупак) |
Публикувано | 24.08.05 10:31 |
|
бих казал, че би трябвало да послушаш човека. дори и да знаеш всичко и да настройш перфектно компилатора - защо се мъчиш след като така и така ще ти трябват serializator and deserializator за Java-та.
Но наистина единствения начин е чрез парсване на входа. не можеш приетото директно да го памнеш на някакъв обект, освен на byte[].
| |
Тема
|
Re: C structures <=> Java?
[re: DrmR]
|
|
Автор | nasko (Нерегистриран) |
Публикувано | 24.08.05 11:59 |
|
>> ...така и така ще ти трябват serializator and deserializator за Java-та
Защо да е задължително? Както сам казваш, на входа получаваш byte[]. Четеш и присвояваш на съответните полета в Джава класа... Грозничко, ама няма как.. сериализирането как ще ти помогне?
| |
Тема
|
Re: C structures <=> Java?
[re: oncho]
|
|
Автор | nasko (Нерегистриран) |
Публикувано | 24.08.05 12:10 |
|
Ми това е начинът. Само че на входа не е трябва да получаваш String, а byte[]. Някои ще кажат, че Джава е тъп език, ама идеята е, че в Джава само виртуалната машина (трябва да) знае как, къде и в каква последователност в паметта са разположени мемберите на класовете (struct-ове няма)... Та излиза, че това не е бъг а фичър ;)
| |
Тема
|
Re: C structures <=> Java?
[re: oncho]
|
|
Автор | l (Нерегистриран) |
Публикувано | 24.08.05 13:54 |
|
Твоя си работа -- програмата си е твоя, можеш да си я пишеш с краката като искаш :) Аз само споменах как обикновено се пишат междуплатформени програми. Лично аз в никакъв случай не бих използвал структура за предаване на данни, дори ако средата за предаване е споделена памет.
| |
Тема
|
Re: C structures <=> Java?
[re: oncho]
|
|
Автор | ches (Нерегистриран) |
Публикувано | 24.08.05 14:07 |
|
Просто кажи Хай на CORBA
проблемите ти са решени , с 2 думи:
1) описваш структората на IDL
2) със Ц ОРБ генерираш стубовете(и скелетони)
3) със Жаба ОРБ генерираш състото за Жаба
4) пускаш един Кос Нейминг
5) пишеш по 10 реда код от двете страни
6) весело и щастливо обменяш каквото си поискаш
| |
Тема
|
Re: C structures <=> Java?
[re: oncho]
|
|
Автор | Pesho tupot (Нерегистриран) |
Публикувано | 25.08.05 14:19 |
|
Zdrasty!
Ako si gotov da kleknesh malko, bux ti preporuchal slednoto:
1. Web-services (SOAP, XML-marchaling) ili neshto takova.
Naprimer
<xml><my_h>
<flags>102</flags>
<text>Tova e tup text</text>
</my_h></xml>
2. CORBA - ama tuk problema e sushtija, ste trjabva da podmenish transporta ot TCP/IP/Sockets na CORBA
3. Nesto super izmisleno:
BYTE tt[104];
my_h my;
C:
tt[0]= (BYTE)my.flags>>24;
tt[1]= (BYTE)(my.flags>>16)&& 0xFF;
tt[2]= (BYTE)(my.flags>>8)&& 0xFF;
tt[3]= (BYTE)(my.flags && 0xFF);
strcpy(tt+4, my.text);
// Tova e paketiraneto
| |
Тема
|
Re: C structures <=> Java?
[re: Pesho tupot]
|
|
Автор | ches (Нерегистриран) |
Публикувано | 25.08.05 17:50 |
|
да де, само че тази подмяна се прави автоматично , ти не се занимаваш да пишеш там е далверата ....
е и Веб Сервисес е състия к*р като Цорба , едно и също е само съобщенията не са бинари ами хмл .....
но и при двете далаверата е че друг ти прави маршалинг и на ти се налага да пишеш:
шитс лайк дис
BYTE tt[104];
my_h my;
C:
tt[0]= (BYTE)my.flags>>24;
tt[1]= (BYTE)(my.flags>>16)&& 0xFF;
tt[2]= (BYTE)(my.flags>>8)&& 0xFF;
tt[3]= (BYTE)(my.flags && 0xFF);
strcpy(tt+4, my.text);
| |
|
Страници по тази тема: 1 | 2 | >> (покажи всички)
|
|
|