Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Java Socket - sitova komunikace

Zdravim. Chtel bych se zeptat jak je to u Socketu v Jave. Dejme tomu ze mam server a klient. A server bude poskytovat data pro klient (klient nevi kdy). Napada me posilat request na server z clientu v nejakem intervalu a kdyz data budou tak prijdou nazpet. Takto by to pravdepodobne fungovalo. Ale nejde pres socket nebo neni zpusob jak bych mohl drzet mezi klientem a serverem trvale spojeni? Kdyz vytvorim Socket, odeslu data, tak ho musim uzavrit aby mi ty data dorazily na server. Timpadem ztracim jakysi druh identifikace clienta. Ten bych si samozrejme mohl napsat sam prostrednictvim nejakeho klice ci Ip adresy. Ale neslo by drzet Socket tak dlouho dokud se client neodpoji a presto by komunikace mezi clientem a serverem probihala prubezne a ne az po uzavreni socketu?

Snad jsem se vyjadril srozumitelne.

Předmět Autor Datum
Preco by si ho musel zavret? ktore konkretne tam volas metody? http://docs.oracle.com/javase/7/docs/…
MM.. 25.05.2013 01:55
MM..
WTF? Sockety jsou full duplex, takže můžeš posílat z klienta na server a opačně kdy chceš. Po odeslá…
MaSo 29.05.2013 07:07
MaSo
Jen se zeptám, z jakého důvodu konkrétně by měl být v tomto případě multithreading použit?
freez2 31.05.2013 17:13
freez2
Na klientovi potřebuješ minimalně jedno vlákno (kromě hlavního) na zapisování do output streamu a čt…
MaSo 31.05.2013 17:24
MaSo
Dobře - ale proč?
freez2 31.05.2013 17:26
freez2
Předpokládám, na serveru chceš obsloužit více klientů "najednou". Předpokládám, že nechceš aby ti v…
MaSo 31.05.2013 17:28
MaSo
Teď už je to jasnější, jsem si to pořád nemohl nějak představit. Díky.
freez2 31.05.2013 17:29
freez2
zrejme naraza na to ze ked nieco posielas a cakas tam na nieco tak aby nebol blokovany napr. prijem…
MM.. 31.05.2013 17:40
MM..
Bohuzel u Socketů v Javě je čtení z input streamu blokující operace, takže se čeká v cyklu na data.… poslední
MaSo 31.05.2013 17:58
MaSo
Socketove streamy maju bufre (velkost sa da konfigurovat)... t.j. data ktore tam zapisujes sa hned n…
emem 29.05.2013 15:12
emem

WTF? Sockety jsou full duplex, takže můžeš posílat z klienta na server a opačně kdy chceš. Po odeslání dat určitě nemusíš zavírat Socket. Z ServerSocketu i Socketu jde získat output a input stream. Budeš potřebovat multithreading. Ukaž kód, který už máš.

Na klientovi potřebuješ minimalně jedno vlákno (kromě hlavního) na zapisování do output streamu a čtení z input streamu. Ale raději pro zvlášt vlákno pro čtení a zvlášť pro zápis.

Na serverové straně potřebuješ pro každého klienta minimálně jedno vlákno.

zrejme naraza na to ze ked nieco posielas a cakas tam na nieco tak aby nebol blokovany napr. prijem dat. Alebo naopak. LAN je full duplex, zavisi od toho co programuejs a jak to programujes ze ci tam su thready ziaduce a jak konkretne to navrhnut (to je predsa hlavna praca vyvojara, navrhnut SW tak aby to nebola len polepena sracka :)

P.S. Thready nie su nutne ak ziadna funkcia na nic necaka a ak vsetko je riadene eventami.

Socketove streamy maju bufre (velkost sa da konfigurovat)... t.j. data ktore tam zapisujes sa hned
neposielaju... caka sa kym ich je 'dostatok' az potom sa odoslu.... ak ich potrebujes poslat hned,
musis ten stream flushnut.... OutputStream::flush()

Zpět do poradny Odpovědět na původní otázku Nahoru