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.
Preco by si ho musel zavret?
ktore konkretne tam volas metody?
http://docs.oracle.com/javase/7/docs/api/java/net/ Socket.html
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áš.
Jen se zeptám, z jakého důvodu konkrétně by měl být v tomto případě multithreading použit?
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.
Dobře - ale proč?
Předpokládám, na serveru chceš obsloužit více klientů "najednou".
Předpokládám, že nechceš aby ti vytuhlo případné klientské GUI, když něco posíláš na server.
Teď už je to jasnější, jsem si to pořád nemohl nějak představit. Díky.
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.
Bohuzel u Socketů v Javě je čtení z input streamu blokující operace, takže se čeká v cyklu na data. Samozřejmě Java má i neblokující API, jmenuje se NIO.
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()