[Javalist] java socket multiple request

József Keresztes xesj.hu at gmail.com
2016. Jan. 18., H, 13:00:31 CET


Sziasztok !

Megkaptam Dénes mintakódjait is köszönöm, azt is átnéztem.
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ő:

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.
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.
*A kliens az utolsó bájt átküldése után hogy jelezze azt hogy nincs több
küldendő adat ?* 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.

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.

Joe


2016. január 16. 10:32 Zsombor írta, <gzsombor at gmail.com>:

> 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.
>
> 2016-01-15 13:17 GMT+01:00 Dénes Medzihradszky <
> medzihradszky.denes at gmail.com>:
>
>> Üdv a listának!
>>
>> Nincs itt valami félreértés?
>> 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.
>> 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.
>> 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.
>>
>>
>> Dénes
>>
>> 2016-01-15 12:48 GMT+01:00 József Keresztes <xesj.hu at gmail.com>:
>>
>>> Azt hiszem közben megoldódott. A szerver oldalon lehetett a hiba,
>>> ugyanis:
>>>
>>> Socket socket = serverSocket.accept();
>>> ...
>>> // input olvasás, output írás
>>> ...
>>> socket.close();
>>>
>>> é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.
>>> Valszeg a kliens és szerver kzötti kommunikációt kell egyeztetni (egy
>>> protokolt kitalálni) mikor és ki zárja le a kapcsolatot.
>>> Köszönöm a netty ötletet, de engem most pont a low level szint érdekel.
>>>
>>> Joe
>>>
>>>
>>> 2016. január 15. 12:34 László Magyar írta, <magyarl05 at gmail.com>:
>>>
>>>> Üdv,
>>>>
>>>> Ajánlanám TCP és egyéb I/O kommunikációra a netty <http://netty.io/>
>>>> projektet, ami a "low level" dolgokat elintézi.
>>>>
>>>>
>>>>
>>>> 2016. január 15. 12:27 József Keresztes írta, <xesj.hu at gmail.com>:
>>>>
>>>>> Sziasztok !
>>>>>
>>>>> A neten keresgéltem, de nem találtam a problémára megoldást.
>>>>> A lényeg hogy TCP-s kommunikációt szeretnék egy szerverrel.
>>>>> A kliensben létrehozok egy Socket objektumot, és ezzel a socket-tel
>>>>> akarok
>>>>> több kérést(választ) csinálni. Tehát csak egyszer akarom a Socket-et
>>>>> létrehozni,
>>>>> majd ezen a csatornán írnék az outputstream-be, és olvasnám az
>>>>> inputstream-et,
>>>>> majd ismét írnék az outputstream-be, és olvasnám az
>>>>> inputstream-et...stb.
>>>>>
>>>>> 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.
>>>>> 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 ?
>>>>>
>>>>> 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.
>>>>>
>>>>> Joe
>>>>>
>>>>> _______________________________________________
>>>>> Javalist mailing list
>>>>> Javalist at lists.javaforum.hu
>>>>> http://lists.javaforum.hu/mailman/listinfo/javalist
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Javalist mailing list
>>>> Javalist at lists.javaforum.hu
>>>> http://lists.javaforum.hu/mailman/listinfo/javalist
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Javalist mailing list
>>> Javalist at lists.javaforum.hu
>>> http://lists.javaforum.hu/mailman/listinfo/javalist
>>>
>>>
>>
>> _______________________________________________
>> Javalist mailing list
>> Javalist at lists.javaforum.hu
>> http://lists.javaforum.hu/mailman/listinfo/javalist
>>
>>
>
> _______________________________________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/mailman/listinfo/javalist
>
>
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20160118/1189f7eb/attachment.html>


További információk a(z) Javalist levelezőlistáról