Java: socket

Programovacie jazyky, rady, poradňa...
alfaomega
Expert
Expert
Príspevky: 175
Registrovaný: 31 júl 2008, 17:12
Bydlisko: Martin/Brno

Java: socket

Príspevok od používateľa alfaomega »

Čaute,
potrebujem nejakú radu ako pomocou socketov spraviť jednoduchý IM. Na server použijem externý program. Nejde mi vôbec ani o ten samotný IM (lebo na nete je kopec tutoriálov s GUI) ale o ten princíp ako docieliť toho, že keď klient pošle správu, aby potom mohol server (alebo zase klient) poslať viac ako jednu správu. Neviem ani za toho prísť na tú konštrukciu v programe aby proste nečakal na odpoveď druhej strany ale aby mohol poslať ďalšiu správu.

C: bla
S: bla
C: blabla
C: bla (druhá správa po sebe) tu mi to chybuje, lebo na serveri sa to nezobrazí pokým neodpovie na predchádzajúcu

Zrejme je to tým, že na stdin aj inputStream používam bufferedReader. Preto by som uvítal radu typu: použi tamto alebo hento. A mech sa bavíme konkrétne tak tu je telo main.
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Java: socket

Príspevok od používateľa pcsiete »

Musíš prijímať všetko, čo príde od klienta, nezávisle od odosielania. Bežný postup je vytvorenie osobitného threadu (vlákna) pre prijímanie správ. Odosielať potom môžeš vždy, keď užívateľ zadá vstup - nejakú správu.

Jedno nepekné ale funkčné riešenie je zachovať aktuálny postup s tým, že budeš mať nejaký zoznam správ na odoslanie a nejaký zoznam správ na prijímanie, a jeden loop, ktorý ich bude vyprázdňovať (vždy sa všetko odošle a všetko prijme). Ale to je skôr pre programy, v ktorých máš ty sám na starosti beh celej aplikácie aj s GUI, ako napr. vo WinAPI, a sockety sú neblokujúce. V Java frameworkoch by si takéto niečo mohol zapracovať do nejakého timeru.
alfaomega
Expert
Expert
Príspevky: 175
Registrovaný: 31 júl 2008, 17:12
Bydlisko: Martin/Brno

Re: Java: socket

Príspevok od používateľa alfaomega »

hm, čakal som, že sa to bude dať spraviť bez multithreading a nejakým jednoduchým spôsobom, ktorý som nevidel. Každopádne díky za info :wink:
Napísať odpoveď