Kommunikation mellan C och Java för mobil applikation - Modbus eller Socket?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2008

Kommunikation mellan C och Java för mobil applikation - Modbus eller Socket?

Hej!

Jag har tänkt att göra ett program i C som ska kunna tala med Java. Jag tänker göra en Android applikation med hjälp av Gluon ramverk, som både har stöd för Iphone och Android för Java-programmering.

C-programmet ska vara på min bärbara dator och Java-programmet ska vara min Android-applikation. Då är min fråga:

Vad ska jag använda för att kommunicera över internet för att kunna skicka kommandon?
1. Socket, som både finns inbyggt för C och Java
2. Libmodbus (C-bibliotek) och EasyModbus (Java-bibliotek)
3. Annat alternativ?

Jag tänker exempelvis inte läsa av några värden, utan mest bara sätta start och stop samt ändra parametrar.

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2008

Två enheter talar med varandra över nätet - Vilket kommunikationsprotokoll skall jag använda mig utav?

Jag har ett litet projekt hemma som jag bygger på, men jag har en liten fråga vilket verktyg jag ska använda mig utav.

Låt oss säga att min dator X har en SQL databas + en webapp. Med webappen kan man ständigt se vilka andra enheter som är ansluten till min SQL databas. Enheterna ständigt skickar data till min SQL databas samt webappen.

Nu kommer frågan: Kommunikationen ska vara mellan Server och Klient, där Klient ska skicka data från sig själv till Server och Server skickar sin data + Klient's data till SQL Server och WebApp, så webappen kan visa vilka enheter som har anslutning.

Jag kan rita upp en bild:

SQL Server + WebApp <--------->Internet<-----------> Server<------> Klient | |<-------------------->Server<----->Klient | |<-------------------->Server<----->Klient | |<-------------------->Server<----->Klient

Finns det något bra verktyg att använda här? Är Modbus bra? Socket? Annat?

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Värnamo
Registrerad
Maj 2012

Vilket spårk/miljö utvecklar du i? Är det .NET så skulle SignalR kunna vara ett alternativ för att visa anslutna/live klienter

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2008
Skrivet av SpaceWeed:

Vilket spårk/miljö utvecklar du i? Är det .NET så skulle SignalR kunna vara ett alternativ för att visa anslutna/live klienter

Java tänker jag använda mig utav.

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Registrerad
Jul 2008

Om jag förstår de grova dragen rätt så låter det lämpligt att implementera det hela som en webservice. Ska vara relativt enkelt att komma igång med det i java som jag förstår det.

Det jag inte förstår är vad Server och Webapp är och gör.
Är det bara Webapp som har tillgång till din SQL databas?
Är SQL databas + Webapp ett ramverk/paket som alltid körs på samma dator?
Så som du ritat har du en Server per Klient, hur kommer det sig?

Låter för mig som att du har två use case du försöker supportera:
1: SQL-Server <--> Web service <-(REST API)-> Klient
2: Web app. <--> Web service. <-->. Klient
Att lägga din web service som det gemensamma lagret mellan klienten och data så får du kontroll över alla sätt en klient kan interagera med databas och webapp. Du kan också hålla din SQl-server och webapp på ett privat subnet och därmed få ökad säkerhet genom att bara tillåta anslutningar från din web service.

Förtydliga gärna lite detaljer kring din arkitektur så blir det lättare att tipsa.

Skickades från m.sweclockers.com

data, representation av värden, text etc. lämpad för överföring, tolkning eller bearbetning av människor eller maskiner.
dator, digital automatisk beräkningsmaskin som styrs av ett i dess minne lagrat program.

Trädvy Permalänk
Medlem
Plats
Åland
Registrerad
Jun 2009
Skrivet av heretic16:

Jag har ett litet projekt hemma som jag bygger på, men jag har en liten fråga vilket verktyg jag ska använda mig utav.

Låt oss säga att min dator X har en SQL databas + en webapp. Med webappen kan man ständigt se vilka andra enheter som är ansluten till min SQL databas. Enheterna ständigt skickar data till min SQL databas samt webappen.

Nu kommer frågan: Kommunikationen ska vara mellan Server och Klient, där Klient ska skicka data från sig själv till Server och Server skickar sin data + Klient's data till SQL Server och WebApp, så webappen kan visa vilka enheter som har anslutning.

Jag kan rita upp en bild:

SQL Server + WebApp <--------->Internet<-----------> Server<------> Klient | |<-------------------->Server<----->Klient | |<-------------------->Server<----->Klient | |<-------------------->Server<----->Klient

Finns det något bra verktyg att använda här? Är Modbus bra? Socket? Annat?

Förstår inte riktigt hur du har tänkt? En server per klient? Låter bakvänt.
Som @Strepto säger är nog det enklaste att din "WebApp" är ett enkelt REST API som sedan klienter anropar.
Att bytta REST APIer i Java är busenkelt om du använder Spring: https://spring.io/guides/gs/rest-service/.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2008
Skrivet av Strepto:

Om jag förstår de grova dragen rätt så låter det lämpligt att implementera det hela som en webservice. Ska vara relativt enkelt att komma igång med det i java som jag förstår det.

Det jag inte förstår är vad Server och Webapp är och gör.
Är det bara Webapp som har tillgång till din SQL databas?
Är SQL databas + Webapp ett ramverk/paket som alltid körs på samma dator?
Så som du ritat har du en Server per Klient, hur kommer det sig?

Låter för mig som att du har två use case du försöker supportera:
1: SQL-Server <--> Web service <-(REST API)-> Klient
2: Web app. <--> Web service. <-->. Klient
Att lägga din web service som det gemensamma lagret mellan klienten och data så får du kontroll över alla sätt en klient kan interagera med databas och webapp. Du kan också hålla din SQl-server och webapp på ett privat subnet och därmed få ökad säkerhet genom att bara tillåta anslutningar från din web service.

Förtydliga gärna lite detaljer kring din arkitektur så blir det lättare att tipsa.

Skickades från m.sweclockers.com

Server och Klient kan inte bara en webapp, eller något som hostar upp en hemsida.

Webapp är ett sätt för att kunna se statusen på Server och Klient. Server är till för att tala med Klient och Server skickar data till Webapp.
Server skickar data --> SQL och Webapp. Webapp läser från SQL.

>> Så som du ritat har du en Server per Klient, hur kommer det sig?
För dessa servers är raspberry Pi

Detta går inte. Server och Klient måste vara självständiga.

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2008
Skrivet av willesakken:

Förstår inte riktigt hur du har tänkt? En server per klient? Låter bakvänt.
Som @Strepto säger är nog det enklaste att din "WebApp" är ett enkelt REST API som sedan klienter anropar.
Att bytta REST APIer i Java är busenkelt om du använder Spring: https://spring.io/guides/gs/rest-service/.

För varje Server och Klient ska vara en Raspberry Pi som samlar in data. Varje Klient och Server styr också andra saker parallellt.

Men vad tror ni för kommunikationsmetod mellan Server och Klient samt Server och WebApp? Modbus?

Jag använder mig av JavaServer Faces, inte Spring. Det har med att JSF är enklare än Spring. Jag har försökt med Spring, men förstod inget.

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Moderator
Registrerad
Jul 2017

Hej, @heretic16!

Jag har sammanfogat två av dina trådar som handlar om samma ämne. På det sättet har alla deltagare en bättre historik om vad du skrivit innan, och det blir lättare att hitta i forumet.

Observera att det enligt Sweclockers forumregler inte är tillåtet att skapa flera trådar om samma ämne (§3.3). Om du har mer information att tillägga för att förtydliga en tidigare fråga går det bra att svara med ett nytt inlägg i en tidigare tråd, så länge inlägget tillför ny information och inte är en ren bumpning (§4).

Lycka till med ditt projekt!

Med vänlig hälsning,
pv2b (Moderator)

För bäst hjälp, försök att svara på alla frågor som ställs i ett inlägg. Då slipper vi fråga om samma sak fler gånger, och du får hjälp snabbare. :-)

Trädvy Permalänk
Medlem
Plats
Åland
Registrerad
Jun 2009
Skrivet av heretic16:

För varje Server och Klient ska vara en Raspberry Pi som samlar in data. Varje Klient och Server styr också andra saker parallellt.

Men vad tror ni för kommunikationsmetod mellan Server och Klient samt Server och WebApp? Modbus?

Jag använder mig av JavaServer Faces, inte Spring. Det har med att JSF är enklare än Spring. Jag har försökt med Spring, men förstod inget.

Varför skall varje Raspberry vara server OCH klient?
Ett klokare upplägg i min mening vore att ha en central webserver som hostar din "WebApp" och sedan kalla varje Raspberry för en klient.

EDIT: Läste om tråden och "de missade inläggen".
Varför duger inte vanliga HTTP anrop som kommunikation över internet?

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2008
Skrivet av pv2b:

Hej, @heretic16!

Jag har sammanfogat två av dina trådar som handlar om samma ämne. På det sättet har alla deltagare en bättre historik om vad du skrivit innan, och det blir lättare att hitta i forumet.

Observera att det enligt Sweclockers forumregler inte är tillåtet att skapa flera trådar om samma ämne (§3.3). Om du har mer information att tillägga för att förtydliga en tidigare fråga går det bra att svara med ett nytt inlägg i en tidigare tråd, så länge inlägget tillför ny information och inte är en ren bumpning (§4).

Lycka till med ditt projekt!

Med vänlig hälsning,
pv2b (Moderator)

Då får jag be om ursäkt. Jag hade totalt glömt bort denna tråd.

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Jun 2008

Förresten! Är det god praktik att ha trådar med socket? Typ som att vi har en tråd som ständigt läser utav klienter och en som ständigt läser in och en som ständigt skickar data?

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Sverige
Registrerad
Jul 2001

Vad du krånglar till det. Kör något enkelt som REST med json eller nåt smidigt för att anropa servern från klienten.

WS: AMD Ryzen 7 1700 | 16 GB DDR4 | Geforce GTX 1060 OC 6GB | 480 + 256 + 240 + 240 GB SSD | Win10 x64 Professional + Antergos Linux (Arch-derivat)
Bärbar: Macbook Pro Retina 13" | Intel Core I5 2,4Ghz | 16GB RAM | 256GB Flash
Server: 3x HP Proliant microserver Gen8 | 16 GB DDR3 ECC ram | Sammanlagt 26TB HDD | Esxi

Trädvy Permalänk
Medlem
Plats
Sverige
Registrerad
Jul 2001
Skrivet av heretic16:

För varje Server och Klient ska vara en Raspberry Pi som samlar in data. Varje Klient och Server styr också andra saker parallellt.

Men vad tror ni för kommunikationsmetod mellan Server och Klient samt Server och WebApp? Modbus?

Jag använder mig av JavaServer Faces, inte Spring. Det har med att JSF är enklare än Spring. Jag har försökt med Spring, men förstod inget.

Varför jämför du JSF med Spring? Spring är ett stort ramverk för bl.a. java som i princip ersätter Java EE. Inte direkt jämförbart med JSF..

WS: AMD Ryzen 7 1700 | 16 GB DDR4 | Geforce GTX 1060 OC 6GB | 480 + 256 + 240 + 240 GB SSD | Win10 x64 Professional + Antergos Linux (Arch-derivat)
Bärbar: Macbook Pro Retina 13" | Intel Core I5 2,4Ghz | 16GB RAM | 256GB Flash
Server: 3x HP Proliant microserver Gen8 | 16 GB DDR3 ECC ram | Sammanlagt 26TB HDD | Esxi