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

Permalänk

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.

Permalänk

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?

Permalänk
Medlem

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

Permalänk
Skrivet av Bosnic:

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.

Permalänk
Medlem

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

Visa signatur

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.

Permalänk
Medlem
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/.

Permalänk
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.

Permalänk
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.

Permalänk
Hedersmedlem

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)

Permalänk
Medlem
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?

Permalänk
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.

Permalänk

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?

Permalänk
Medlem

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.

Visa signatur

WS: Mac Studio M1 Max | 32 GB | 1TB | Mac OS
WS: Intel i5 12600K | 64 GB DDR4 @3600 Mhz | 2x1TB nvme 2x1TB SSD SATA | Windows 11 & Manjaro Linux
Bärbar: Macbook Pro 14" | M1 Pro | 16GB RAM | 512GB SSD | Mac OS
Servrar: Intel i7 10700K | 64 GB DDR4 @3600Mhz | 3 TB SSD + 22TB HDD | Unraid |
4x Raspberry pi 4b 8Gb | Dietpi |

Permalänk
Medlem
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..

Visa signatur

WS: Mac Studio M1 Max | 32 GB | 1TB | Mac OS
WS: Intel i5 12600K | 64 GB DDR4 @3600 Mhz | 2x1TB nvme 2x1TB SSD SATA | Windows 11 & Manjaro Linux
Bärbar: Macbook Pro 14" | M1 Pro | 16GB RAM | 512GB SSD | Mac OS
Servrar: Intel i7 10700K | 64 GB DDR4 @3600Mhz | 3 TB SSD + 22TB HDD | Unraid |
4x Raspberry pi 4b 8Gb | Dietpi |