# UDP zwischen Java und C++ funktioniert nicht.



## netdiver (4. Jul 2005)

Hallo Leute.

Ich hab ein kleines Problem mit Java. Ich bin C++ Programmierer und versuche gerade meine C++ Applikation über UDP mit einem kleinen Java Programm kommunizieren zu lassen.

Ich hab einen Java (UDP) Client und Server ... die kommunizieren wunderbar miteinander.
Und ich hab das gleiche in C++. Auch hier werden munter Daten zwischen den beiden ausgetauscht.

Nun der Challange schlecht hin .. die Kommunikation zwischen Java und dem jeweiligen Counterpart in C++. Ergebnis: Es geht einfach ums verrecken nicht. ( Firewall, falsche Ports und so weiter sind schon ausgeschlossen ..  :wink: )

Hier noch ein paar Code Schnipsel:

C++ part: (VC++ MFC)

  Ich habs mit Winsock und auch mit der WinSock2 probiert und dann mit:


```
...
 WSAStartup(..)
 socket(AF_INET, SOCK_DGRAM, 0);
 ...
```


Java part: ( Java 2 - 1.5.0_01 )


```
...
 socket.connect(address, DAYTIMEPORT );
 byte[] buf = new byte[DGRAM_BUF_LEN];
 DatagramPacket packet = new DatagramPacket(buf, buf.length );
 socket.send(packet);
 socket.receive(packet);
 ...
```

Ist mir da irgendwas entgangen ?!   :bahnhof:

Grüße und vielen Dank für Antworten ..

Marco


----------



## byte (4. Jul 2005)

du solltest eine middleware wie corba verwenden. oder du musst dich auf ein gemeinsames datenformat einigen, das beide sprachen verstehen (z.b. soap).


----------



## netdiver (4. Jul 2005)

Uups .. und ich dachte UDP wäre ein Standard Protokoll ?!?! (So nach RFC und so .. )

Hast Du da zufällig noch ein paar Zusatzinfos / Ideen? - Ich würd sehr ungern noch was dazu nehmen. (C++ und Java ist schon grausam genug.)

Gruß,

Marco


----------



## byte (4. Jul 2005)

udp ist ein standardprotokoll, das ist richtig. aber es handelt sich dabei nur um ein standard transport protokoll. was dabei transportiert wird, also das datenpaket, ist nicht standardisiert. wenn du jetzt z.b. einen java string per udp verschickst, woher soll dann der c++ client wissen, dass das ein string ist? die datentypen sind nicht kompatibel. daher muss man sich vorher auf einen einheitlichen datentyp einigen, also eine zwischendarstellung, die beide seiten verstehen.

dafür wurden unter anderem middlewares wie corba oder webservices entwickelt, damit heterogene systeme (also z.b. java und c++) miteinander kommunizieren können. beispiel corba: da kannst du dann mit hilfe von idl compilern (für java und c++) stubs und skeletons erzeugen, die jeweils in den einheitlichen datentyp übersetzen. dadurch kann man jeweils in seiner "welt" bleiben und braucht sich darüber keine gedanken mehr machen.

google einfach mal nach middleware, dann solltest du genug über das thema finden.

ps: warum benutzt du udp und nicht tcp?


----------



## Guest (5. Jul 2005)

Danke für den Hinweis. ich werd gleich mal googeln

Ist eine Vorgabe mit UDP. Macht auch durchaus Sinn, da viele Clients sporadisch Nutzdatenpakete an einen Server senden sollen. Hat den smarten Vorteil, ich brauche das ganze Verbindungsgeraffel nicht. Geht mal ein Paket verloren, ist das nicht so wild.

Ist doch aber eigentlich grausam, so viel Aufriß nur um ein Datenbuffer von gerade mal 1Kb auszutauschen.
Aber wieder was neues .. das ist ja immer das witzige .. man lernt nie aus.


----------

