Just nu i M3-nätverket
Jump to content

C++ -> Java


Bjornie

Recommended Posts

Hur skickar jag smartast information från C++ till en Java-server? Jag har tänkt skriva ett protokoll som skickar data via XML-dokument, men vet inte riktigt hur jag ska skicka det från ett C++ program till en Java-server.

 

Det skulle vara bra om det fanns nåt sätt som funkade lika smidigt under Linux som Windows. :-)

 

Tack på förhand!

Link to comment
Share on other sites

Jag är definitivt ingen expert på området, men perl->erlang funkar klockrent med sockets. (IO::Socket::INET i Perl)

 

 

==Coleburn==

 

--------------------

"It takes a lot of knowledge to

really mess something up!"

 

Link to comment
Share on other sites

Protokollet du letar efter är SOAP, som är ett sätt för RPC mellan olika plattformar. Specen ägs av W3C.

 

SOAP används genomgående inom Microsoft.Net konceptet och du kommer se SOAP spridas snabbt inom Java-världen. I Microsoft.Net är det abstraherat så man får enkla funktionsanrop som översätts till SOAP. SOAP går hyfsat bra att köra över HTTP, vilket gör det enkelt att hantera brandväggsproblem.

 

http://www.w3.org/TR/SOAP/

http://msdn.microsoft.com/soap/

 

Det finns flera implementationer, se exempelvis: http://www.soapware.org/directory/4/implementations

 

Jag har använt Microsofts soap toolkit, vanliga MSXML samt Microsoft.Net men inget som är plattforms-oberoende. Men en av poängerna med SOAP är just plattformsoberoendet.

 

[inlägget ändrat 2001-12-24 11:18:49 av developer]

Link to comment
Share on other sites

Tack för ditt inlägg! Alltid lika roligt att läsa, eftersom att du är mycket kunnig!

 

Det jag letade efter nu var dock inte vilket protokoll jag skulle använda, utan mer HUR jag skulle använda det. T.ex. om man kan i C++ skicka på något sätt så att man med Java kan ta emot med en vanlig Socket.

 

Ska ta mig en riktig titt på SOAP den här gången! :-)

 

Link to comment
Share on other sites

Jag har inget bra plattformsoberoende svar, kanske någon annan kan hjälpa till? Leta på www.sockets.com

 

Vet du att klienten alltid är i C++ och servern i Java? (Om du ska skriva en server blir ju komplexiteten mycket större med avseende på bland annat säkerhet). Hur har du tänkt lösa säkerhet nu?

 

Jag rekommenderar att du letar efter något slags HTTP-bibliotek i C++ (hellre än att använda TCP eller UDP direkt, dvs "...en vanlig Socket").

 

I Windows-miljö är wininet ett hyfsat alternativ (men inte så skalbart) http://msdn.microsoft.com/library/default.asp?url=/workshop/networking/wininet/reference/functions/internetopen.asp?frame=true

 

En lösning är ju att du skriver din egen wrapper som ditt program använder. Sedan använder den wininet i Win32 och något annat bibliotek om du använder Linux etc.

 

Link to comment
Share on other sites

Jag har egentligen inte tänkt så mycket, utan det här med Java mot C++ och vice versa var det första problemet som jag kom att tänka på. Servern har jag inte bestämt om jag ska skriva i Java, men det lutar åt det.

 

Skulle du kunna förklara lite närmare om det här med wrapper-klasser? Har stött på ordet ett par gånger, men inte riktigt förstått vad det är/gör. :-)

 

Link to comment
Share on other sites

Wrapper-klass? En vanlig klass som kapslar in (wrappar) viss funktionalitet. Inget konstigt alls.

 

Poängen är att du i ditt program (som använder viss funktionalitet - i ditt fall kanske sockets) vill använda samma kod oavsett vilken miljö det är. Medan wrapperklassen troligen skulle variera beroende på om du kompilerar i Linux eller Win32.

 

Du skulle exempelvis kunna välja MFCs hjälpklass CHttpFile ( http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_chttpfile.asp?frame=true ) i Win32. Sedan skulle du göra din egen klass i Linux-miljö som har exakt samma interface som MFC-klassen. Typ såhär:

 

#ifdef _WIN32
#include <afxinet.h>
#else
class CHttpFile
{
// Gör hela implementationen, med samma gränssnitt
// som MFC-klassen har
};
#endif

 

Bara ett exempel, jag menar inte att säga huruvida just CHttpFile är lämpligt i ditt fall. Fördelen är ju att du snabbt skulle komma igång med ditt program och göra en första fungerande version. Sedan när den är klar, kan du ju enkelt lägga till stöd för andra plattformar i efterhand.

 

Hade du använt wininet eller berkley sockets eller winsock2 direkt från ditt program (dvs utan wrapper-klassen) är det svårare att göra det generellt. Fullt möjligt, men det blir lätt rörig kod om man inte skiljer olika delar åt.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...