<div dir="ltr"><div>Szia!<br><br></div><div>Ha ez eles project, akkor meselj meg a kovetelmenyekrol, es segitunk protokollt/konyvtarat valasztani.<br></div><div>Ha mar mukodo rendszer, es az ujrakonnektalagatas nem okoz teljesitmenyproblemat, ne piszkald:<br><a href="https://sites.google.com/site/interactiveflowchart/">https://sites.google.com/site/interactiveflowchart/</a><br></div><div><br><br></div><div>Feltetelezve, hogy onkepzesrol van szo, a HTTP-t pedig gondolom ismered, ott pont erre valo a Content-Length header, illetve a chunk meret minden chunk elejen. Arra keress ra, hogy "Connection: keep-alive", meg "Transfer-Encoding: chunked"<br><br></div><div>Lehet specialis karakterrel/karaktersorozattal is jelolni az uzenet veget, de akkor az a karakter/sorozat az uzenetben nem fordulhat elo, ha megis, akkor escape-elni kell, es azt mindenki utal.<br></div><div><br></div><div>Hasznalhatsz TCP helyett UDP-t, ha minden uzenet kisebb 64K-nal, felcserelodhetnek uzenetek, es nem baj, ha neha egy-egy elvesz. (ahanyszorosa az uzenet merete az MTU-nak, annal kevesbe "neha"...)<br><br></div><div>Van (Volt? Lesz?) olyan is, hogy SCTP, ami sok minden mas mellett azt is tudja, amit te szeretnel, de ugy tunik csak DC tapos servereken mukodik (en legalabbis mindig csak telco-knal latom.) De erdekes, es talan egyszer majd elterjed.<br></div><div><br><br></div><div>Szocske<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-01-18 8:07 GMT-05:00 Dénes Medzihradszky <span dir="ltr"><<a href="mailto:medzihradszky.denes@gmail.com" target="_blank">medzihradszky.denes@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Zsombor tökéletesen megfogalmazta a megoldást, de Magyusznak is igaza van :)<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Valóban arról van szó, hogy az összetartozó bájtsorozat (nevezzük message-nek) átküldése után ezen a szinten nekünk kell valamilyen jelet kitalálni, amit a kliens és a szerver is ismer és ezzel jelezhetjük a szervernek, hogy a teljes üzenet átment. <br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Ha belegondolunk, rajtunk kívül senki sem tudja, hogy mit is jelent az átküldött bájtsorozat.<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Van viszont egy alternatív megoldás, a DatagramPacket, ami nem TCP, hanem UDP alatt működik. Ott egyértelmű, hogy egy átküldött üzenet van csak a csomagban.<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Csatolom a mintakódokat. <br><span class="HOEnZb"><font color="#888888"><br></font></span></div><span class="HOEnZb"><font color="#888888"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Dénes <br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div></font></span></div><div class="gmail_extra"><br><div class="gmail_quote"><span class="">2016-01-18 13:51 GMT+01:00 Zsombor <span dir="ltr"><<a href="mailto:gzsombor@gmail.com" target="_blank">gzsombor@gmail.com</a>></span>:<br></span><div><div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Erre szoktak kitalálni protokollt, hogy ilyen probléma ne forduljon elő :)<br><br><br></div>Üdv<br></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">2016-01-18 13:00 GMT+01:00 József Keresztes <span dir="ltr"><<a href="mailto:xesj.hu@gmail.com" target="_blank">xesj.hu@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div>Sziasztok !<br><br></div>Megkaptam Dénes mintakódjait is köszönöm, azt is átnéztem. <br>Közben megfogalmazódott egy kérdés, amibe most bele is futottam, de csak azért mert szerettem volna mélyebb szintre menni, és tényleg megérteni hogy működik a dolog. A probléma a következő: <br><br>A TCP kliens szépen elkezdi küldözgetni a byte-okat a szervernek az OutputStream-en keresztül, a végén a flush() metódust is meghívja, majd a bájtsorozat átküldése után elkezdené olvasni az InputStream-et.<br></div>A probléma az hogy a TCP server nem tudja hogy vége a byte-sorozatnak, mert ugye honnan is tudná ??? Márpedig ő vár egy EOF jelre (-1), vagyis kialakul egy olyan holtpont hogy mindkettő a másikra vár. <br></div><b>A kliens az utolsó bájt átküldése után hogy jelezze azt hogy nincs több küldendő adat ?</b> A neten erre azt a választ találtam hogy a kliens egy close()-zal zárja le az outputstream-et, csakhogy akkor nincs több kommunikáció, tehát ez nem jó megoldás.<br><br></div><div>Addig persze nekem is jó volt a mintapéldám amíg magasabb szintű DataOutputStream-mel bohóckodtam, és readUTF(), writeUTF()-fel küldözgettem az adatokat, de most kizárólag natúr InputStream, OutputStream-met szeretnék használni mindenféle varázslat nélkül. <br></div><div><br></div>Joe <br><div><div><div><div><br></div></div></div></div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">2016. január 16. 10:32 Zsombor írta, <span dir="ltr"><<a href="mailto:gzsombor@gmail.com" target="_blank">gzsombor@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Ha az egyik oldal lezárja a socket-et, akkor az a másik oldalon is lezárul - a távolságtól függően pár milliszekundum múlva. Ettől függetlenül, ha csak nem zárja le a ServerSocket-et a szerver, ugyanúgy tud újra kapcsolódni a kliens. <br></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">2016-01-15 13:17 GMT+01:00 Dénes Medzihradszky <span dir="ltr"><<a href="mailto:medzihradszky.denes@gmail.com" target="_blank">medzihradszky.denes@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Üdv a listának!<br><br>Nincs itt valami félreértés? <br>A kliens socket nem zárható le a szerver által, a szerver max a saját socketjét zárhatja le - amit pl a ServerSocket-től kap - hiszen a kliens tipikusan egy másik JVM-ben fut.<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Inkább arról van szó, hogy a szerver oldali socket lezárásával a kliens már nem tud ismételten kapcsolódni.<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Oktatóprogramjaimban itt végtelen ciklusok pörögnek, és/vagy a ServerSocket kapcsolódáskor - accept() - külön szálat indít a létrejött socket objektummal.<span><font color="#888888"><br><br><br></font></span></div><span><font color="#888888"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Dénes<br></div></font></span><div><div><div class="gmail_extra"><br><div class="gmail_quote">2016-01-15 12:48 GMT+01:00 József Keresztes <span dir="ltr"><<a href="mailto:xesj.hu@gmail.com" target="_blank">xesj.hu@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Azt hiszem közben megoldódott. A szerver oldalon lehetett a hiba, ugyanis:<br><br>Socket socket = serverSocket.accept();<br>...<br></div>// input olvasás, output írás <br><div>...<br></div><div>socket.close();<br><br></div><div>és ez utóbbi miatt a kliens socketet a szerver zárta le, így a kliens már nem tudott több kommunikációt kezdeményezni.<br></div><div>Valszeg a kliens és szerver kzötti kommunikációt kell egyeztetni (egy protokolt kitalálni) mikor és ki zárja le a kapcsolatot.<br></div><div>Köszönöm a netty ötletet, de engem most pont a low level szint érdekel.<br><br></div><div>Joe<br></div><div><br></div></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">2016. január 15. 12:34 László Magyar írta, <span dir="ltr"><<a href="mailto:magyarl05@gmail.com" target="_blank">magyarl05@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Üdv,<div><br></div><div>Ajánlanám TCP és egyéb I/O kommunikációra a <a href="http://netty.io/" target="_blank">netty</a> projektet, ami a "low level" dolgokat elintézi.</div><div><br></div><div><br><div class="gmail_extra"><br><div class="gmail_quote"><div><div>2016. január 15. 12:27 József Keresztes írta, <span dir="ltr"><<a href="mailto:xesj.hu@gmail.com" target="_blank">xesj.hu@gmail.com</a>></span>:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><div dir="ltr"><div><div><div><div><div><div><div><div><div><div>Sziasztok !<br><br></div>A neten keresgéltem, de nem találtam a problémára megoldást.<br></div>A lényeg hogy TCP-s kommunikációt szeretnék egy szerverrel.<br></div>A kliensben létrehozok egy Socket objektumot, és ezzel a socket-tel akarok<br></div>több kérést(választ) csinálni. Tehát csak egyszer akarom a Socket-et létrehozni,<br></div>majd ezen a csatornán írnék az outputstream-be, és olvasnám az inputstream-et,<br></div>majd ismét írnék az outputstream-be, és olvasnám az inputstream-et...stb.<br><br></div>A neten csak olyan példát láttam hogy a kliens egy kérés-válasz után lezártja a socket-et.<br></div>Ha akar valamit újra létrehozza. Nekem ez kicsit furcsa, igaz méréseim szerint a gépemen egy socket 10-20 ms alatt létrejön, de miért kellene minden egyes kérésnél újra létrehozni ?<br><br></div>Java-tól függetlenül: én eddig úgy gondoltam ha pl. egy adatbázishoz be vagyok jelentkezve egy klienssel, és percenként küldöm el az SQL-parancsaimat, akkor nem kezdi el mindig felépíteni nulláról a kapcsolatot az adatbázissal.<br><br></div>Joe<br></div>
<br></div></div>_______________________________________________<br>
Javalist mailing list<br>
<a href="mailto:Javalist@lists.javaforum.hu" target="_blank">Javalist@lists.javaforum.hu</a><br>
<a href="http://lists.javaforum.hu/mailman/listinfo/javalist" rel="noreferrer" target="_blank">http://lists.javaforum.hu/mailman/listinfo/javalist</a><br>
<br></blockquote></div><br></div></div></div>
<br>_______________________________________________<br>
Javalist mailing list<br>
<a href="mailto:Javalist@lists.javaforum.hu" target="_blank">Javalist@lists.javaforum.hu</a><br>
<a href="http://lists.javaforum.hu/mailman/listinfo/javalist" rel="noreferrer" target="_blank">http://lists.javaforum.hu/mailman/listinfo/javalist</a><br>
<br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
Javalist mailing list<br>
<a href="mailto:Javalist@lists.javaforum.hu" target="_blank">Javalist@lists.javaforum.hu</a><br>
<a href="http://lists.javaforum.hu/mailman/listinfo/javalist" rel="noreferrer" target="_blank">http://lists.javaforum.hu/mailman/listinfo/javalist</a><br>
<br></blockquote></div><br></div></div></div></div>
<br>_______________________________________________<br>
Javalist mailing list<br>
<a href="mailto:Javalist@lists.javaforum.hu" target="_blank">Javalist@lists.javaforum.hu</a><br>
<a href="http://lists.javaforum.hu/mailman/listinfo/javalist" rel="noreferrer" target="_blank">http://lists.javaforum.hu/mailman/listinfo/javalist</a><br>
<br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
Javalist mailing list<br>
<a href="mailto:Javalist@lists.javaforum.hu" target="_blank">Javalist@lists.javaforum.hu</a><br>
<a href="http://lists.javaforum.hu/mailman/listinfo/javalist" rel="noreferrer" target="_blank">http://lists.javaforum.hu/mailman/listinfo/javalist</a><br>
<br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
Javalist mailing list<br>
<a href="mailto:Javalist@lists.javaforum.hu" target="_blank">Javalist@lists.javaforum.hu</a><br>
<a href="http://lists.javaforum.hu/mailman/listinfo/javalist" rel="noreferrer" target="_blank">http://lists.javaforum.hu/mailman/listinfo/javalist</a><br>
<br></blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
Javalist mailing list<br>
<a href="mailto:Javalist@lists.javaforum.hu" target="_blank">Javalist@lists.javaforum.hu</a><br>
<a href="http://lists.javaforum.hu/mailman/listinfo/javalist" rel="noreferrer" target="_blank">http://lists.javaforum.hu/mailman/listinfo/javalist</a><br>
<br></blockquote></div></div></div><br></div>
<br>_______________________________________________<br>
Javalist mailing list<br>
<a href="mailto:Javalist@lists.javaforum.hu">Javalist@lists.javaforum.hu</a><br>
<a href="http://lists.javaforum.hu/mailman/listinfo/javalist" rel="noreferrer" target="_blank">http://lists.javaforum.hu/mailman/listinfo/javalist</a><br>
<br></blockquote></div><br></div>