Java Socket Programming - Multiple Clients Chat

Поделиться
HTML-код
  • Опубликовано: 27 ноя 2024

Комментарии • 301

  • @f3sa899
    @f3sa899 3 года назад +69

    I think this is the best video on RUclips about I/O streams and sockets.

  • @GiyuTomiokaTheOneAndOnly
    @GiyuTomiokaTheOneAndOnly Год назад +3

    This dude literally explained my entire 5 months course in a 40 minute video

  • @amc1140
    @amc1140 2 года назад +47

    Thank you for taking time to explain each step in simple terms. I tried this on my own and was hung up on how each CH object could share 1 updated array list, but then you pointed out the beauty of static variables!

    • @WittCode
      @WittCode  2 года назад +4

      Thanks so much man! Also love your taste in music haha 🎸

    • @amc1140
      @amc1140 2 года назад

      @@WittCode hell ya Java and Punk Rock are a 90s dynamic duo🤘

    • @og_yamiatan3957
      @og_yamiatan3957 2 года назад

      @@WittCode can i make those names of clients in diferent color ?

    • @Rohan-Prabhala
      @Rohan-Prabhala 3 месяца назад

      @@og_yamiatan3957 I mean it's in the cmd prompt so prob not, but if you make a GUI for it you could find a way

  • @uuo4930
    @uuo4930 2 года назад +30

    This truly explains everything so clear, thanks man

  • @romanzdev
    @romanzdev 9 месяцев назад +3

    Remember to use 'Thread-Safe" collections or manage synchronization in this example.Our static arraylist is a shared resource, and can be accessed by multiple threads simultaneously, where each one can add, remove or read.

  • @cybernetic777
    @cybernetic777 Год назад +12

    This is so exciting!!! I had been trying other tutorials, even paid ones and had problems with all the others. On this one everything went perfect.

  • @weaponkid1121
    @weaponkid1121 3 года назад +3

    Haven't even finished the video yet but I'm happy I found this channel!

  • @MostafaMahmoud-cj2sh
    @MostafaMahmoud-cj2sh 2 года назад +1

    IT WORKED, THANKS I'VE BEEN LOOKING FOR THIS FOREVER, BUT NO TUTORIAL COULD EXPLAIN IT AS YOU DID

  • @imanjallali8258
    @imanjallali8258 2 года назад

    Let me just tell you one thing. Thanks for Being in RUclips to share content most are not capable of doing.

  • @GrayaaJaweher
    @GrayaaJaweher 22 дня назад

    this video is a real gem for us cs students. thank you so much!

    • @WittCode
      @WittCode  22 дня назад +1

      Great to hear! Yeah back when I was in school I had to code this for a class 😀

  • @pawe7420
    @pawe7420 2 года назад +2

    Wow man, you really clearly showed how to make such chat in Java, thanks a lot! :)

  • @jadabouzeid9165
    @jadabouzeid9165 2 года назад +3

    Thank you so much for this video! Very well explained, it helped me a lot for my university project.

  • @UninspiredFilm5
    @UninspiredFilm5 5 месяцев назад

    THIS IS SO COOL! And I managed to reinforce sockets, IO, AND threads ALL AT ONCE

  • @wriottter
    @wriottter Год назад

    I understand all men you're a great teacher!!

  • @jackinquisitor9645
    @jackinquisitor9645 2 года назад

    Thx for your tutorial, I finally understand how socket work

  • @YvanNoah
    @YvanNoah 5 дней назад

    Best video out here, thank you kind dude

  • @spenzr6920
    @spenzr6920 Год назад

    So underrated!!! I wish you'll gain more subscribers and viewers. Amazing video

  • @irinatrandafir7390
    @irinatrandafir7390 2 года назад +3

    You explain everything so well and simple ♡

  • @freddiewittmann1494
    @freddiewittmann1494 3 года назад +1

    Great work! I love the thumbnail! So many WittCodes!

    • @WittCode
      @WittCode  3 года назад

      Thanks for the support Freddie! 😎

  • @cristiangligan-ignatescu771
    @cristiangligan-ignatescu771 3 месяца назад

    Thank you so much dude! Consider becoming a teacher in the future 🙏 You have that pedagogical talent :)

  • @mosesfrancis4976
    @mosesfrancis4976 Год назад

    This is what, I looked for in Java. Thank you so.

  • @martingogaming1777
    @martingogaming1777 3 года назад

    Thank you, I had trubles with sending message to multiple clients, because of reading system input, thanks again!

    • @WittCode
      @WittCode  3 года назад

      Hey there thanks so much! Yeah the reading input part tripped me up for a while too! 😃

  • @oveezion
    @oveezion 2 года назад

    Lowkey saved my uni lab work xd , keep up the good work !!

  • @maxhitmemedi6598
    @maxhitmemedi6598 3 года назад +2

    You are a lifesaver man, thank you a lot you are saving me a ton of hours and nerves :)

  • @motodankz4838
    @motodankz4838 Год назад

    Wow you are suck a great teacher. You explain every step. Thank you so much!

  • @harrygabbi5181
    @harrygabbi5181 2 года назад +1

    great video thanks for making it i was stuck on this for so long

  • @0brooo
    @0brooo 2 года назад

    I took a server side approach instead of a client side approach, love the video tho, thank you

  • @tungle3635
    @tungle3635 3 года назад

    thank you so much, this content deserves much more credit

    • @WittCode
      @WittCode  3 года назад

      Thanks so much! That means a lot! 😃

  • @bovich9457
    @bovich9457 День назад

    Thank you for this excellent content.

  • @premkarki2
    @premkarki2 8 месяцев назад

    Thank you for the clear and concise explanation. I just subscribed you. I wish to watch your more videos.

  • @bhpure30
    @bhpure30 8 месяцев назад

    great video, wonderful explanations throughout too.

  • @uzumakiuchiha7678
    @uzumakiuchiha7678 Год назад

    Nice one man. Keep it up!

  • @rnyah_
    @rnyah_ 2 года назад

    I'm so grateful to you, this really so helpful man thank you so much

  • @m4rt_
    @m4rt_ 2 года назад +8

    In the broadcastMessage method, why compare usernames when you can just do: if (clientHandler != this)
    since clientHandlers is just an array of the clientHandler instances. Also doing it this way allows there to be multiple users with the same username since it does not rely on unique usernames to broadcast correctly, but instead on the instances. (I have not tested it yet, but it should work, if it doesn't then I will update this comment)
    Edit: I said I would only update if it didn't work, but it worked and I thought I would update it anyways. TL;DR it works, and its probably the better way to do it.

    • @XiamJoy
      @XiamJoy Год назад

      yah it sounds correct

  • @borissmax3
    @borissmax3 Год назад

    Thank you! Learned a lot from this

  • @kevincianci5443
    @kevincianci5443 3 года назад +5

    Your content is amazing brother, keep it up! I would love to see this video with a GUI integration as you said in the end of the video.

    • @WittCode
      @WittCode  3 года назад +3

      Thanks so much Kevin! And I will certainly be making a GUI version of this! Probably using JavaFX 😀

    • @vikaskotwani9573
      @vikaskotwani9573 2 года назад

      @@WittCode , hey witt please do that asap

  • @g.722
    @g.722 3 года назад +1

    Very helpful! Thank you so much!

  • @fab_15ger40
    @fab_15ger40 10 дней назад

    thank you! I liked this video.

  • @mc_mzcgt
    @mc_mzcgt 3 года назад

    Thank you so much!!! This is what I was finding!

  • @charlesjaussaud1822
    @charlesjaussaud1822 2 года назад

    your video is awesome and helped me a lot. thank you.

  • @haris7521
    @haris7521 2 года назад

    This is simply awesome man 👍❤️

  • @angelinawho5551
    @angelinawho5551 3 года назад

    You are lifesaver man, thank you a lot :)

  • @damiaotiktok023
    @damiaotiktok023 9 месяцев назад

    Perfeito bom demais essa aula, ficou muito bom mesmo . Sem enrolação e sem complicação foi ótimo esse tutorial, valeu deixo o meu like e minha inscrição, obrigado

  • @vasantpatel9297
    @vasantpatel9297 2 года назад

    this is briliant my friends thank you so much

  • @danielgitonga9478
    @danielgitonga9478 Месяц назад

    Great video all the best

    • @WittCode
      @WittCode  Месяц назад

      Great to hear! Thanks for watching

  • @celerisBackendFramework
    @celerisBackendFramework 7 месяцев назад

    thanks a lot bro, keep the good job.✌

  • @akalankaalutwela7712
    @akalankaalutwela7712 3 года назад

    Thank you very much for this!

  • @hvasomhelst
    @hvasomhelst 11 месяцев назад

    thank you so much, saved my homework truly!

  • @chetan788
    @chetan788 Год назад

    video is very helpful. Thank you.

  • @arthurbakker740
    @arthurbakker740 7 месяцев назад

    Great content, learned a lot!

    • @bernardkingsley8598
      @bernardkingsley8598 7 месяцев назад

      Is there anyway I can see your code by chance, that is if it's working

  • @sirojiddingroup
    @sirojiddingroup 2 года назад

    Thanks bro it has been very usefull for me

  • @elifkaragoz2606
    @elifkaragoz2606 2 года назад +2

    Which design patterns are we using in this program and which pattern I can implement into the code in addition to develop the code?

  • @sahilbhirud1301
    @sahilbhirud1301 3 года назад +1

    Love the thumbnail hahah

    • @WittCode
      @WittCode  3 года назад

      Sahil! Good to hear from you man! And yeah I thought it was the coolest one Ive made so far lol

  • @feuerherz007
    @feuerherz007 2 года назад +2

    Hello sir. Is the code still on your website? i can only seem to see some Javascript. Is it on a github page?

  • @replikvltyoutube3727
    @replikvltyoutube3727 2 года назад

    This helped me a lot, thanks!

  • @mihaioprea9398
    @mihaioprea9398 2 года назад

    Great video! Really helped!

  • @Tygelin86
    @Tygelin86 5 месяцев назад

    Great tutorial!

  • @nadiiar75
    @nadiiar75 2 года назад +1

    Greetings from Ukraine! You are awesome! Thank you so much for this great tutorial. It helped me a lot.

  • @Asswipe69
    @Asswipe69 3 года назад

    Nice tutorial man, rly need something like tihs :D

    • @WittCode
      @WittCode  3 года назад +2

      Thanks so much! Also, love your username lol

  • @freddierobinson9587
    @freddierobinson9587 Год назад

    this was perfect for me thank you

  • @ambawadisu2050
    @ambawadisu2050 2 года назад +1

    Thank you man, is that possible to chat only with one person from the group please share if you have such kind of code

  • @15iuniee
    @15iuniee Год назад

    Nice video it was a really nice watch and i learned a bunch of new things from it! Can anyone please explain how to run it in CMD tho? (it looked cool)

  • @fabiansvensson9588
    @fabiansvensson9588 3 года назад +7

    Great cover of sockets in general. Just wanted to mention that I got an error in the ClientHandler whenever the Client exited. For some reason, the exception was not thrown and the bufferedReader read a "null" value from the input. I added this line and it worked:
    if(messageFromClient == null) throw new IOException();
    By the way, if we wanted to create a network without the use of an intermediary server, so basically client-to-client direct communication. Any tips on how you could go about doing that?
    Thank you sir!

    • @ngocminhpham1358
      @ngocminhpham1358 3 года назад

      I met that problem, too. The things that if I applied your code, the server won't notify that the client who exited is leaving the chat. Is there another way to do that

    • @fabiansvensson9588
      @fabiansvensson9588 3 года назад +1

      @@ngocminhpham1358 You should add the code that you want to execute in the catch:
      try {
      messageFromClient = bufferedReader.readLine();
      if(messageFromClient == null) throw new IOException();
      broadcastMessage(messageFromClient);
      } catch(IOException e) {
      closeEverything(socket, bufferedReader, bufferedWriter);
      break;
      }
      Inside closeEverything, there should be a method called "removeClientHandler();" (this is in the video). If this method is executed then the server should be notifying everyone that the client has left the chat. Double check that you added this catch cluase as well as your "closeEverything" method.

    • @ngocminhpham1358
      @ngocminhpham1358 3 года назад

      @@fabiansvensson9588 thanks a lot!

    • @sankarphat
      @sankarphat 3 года назад

      @@fabiansvensson9588 Oh my god i was desperate while seaching the solution and boom i found your comment. You're a god.

    • @lara564
      @lara564 2 года назад +1

      at which line do you add this "if(messageFromClient == null) throw new IOException();" ?

  • @karolinemalko1723
    @karolinemalko1723 3 года назад

    thank you! Subscribed!

  • @vishnusudarsanam5375
    @vishnusudarsanam5375 2 года назад

    Real gem!!

  • @elishaamenuveve4307
    @elishaamenuveve4307 3 года назад

    Great video!

  • @3umaryy
    @3umaryy 2 года назад +1

    Why we can't run the server again? After it being in use? Like turn off the server and Re-open it.

  • @kutilkol
    @kutilkol 2 года назад +1

    beautiful! thanks! (do more java tutorials pls

  • @patsondamascus885
    @patsondamascus885 Год назад +3

    i tried it it works but my message dont appear to other clients it only appears in my chat only not other chats'

  • @AlexKayzProductions
    @AlexKayzProductions 2 года назад

    Great tutorial, thanks

  • @kurwa_mach
    @kurwa_mach 2 года назад

    Thank you very much, man

  • @johnnys.828
    @johnnys.828 2 года назад

    Thank you very much!

  • @bobfarker4001
    @bobfarker4001 Год назад

    This is very impressive and it works. I like your approach with clientHandlers. Im a little confused about how multiple clients can connect using the same port.
    When I did a similar project in C# i got an error saying something like "this port is already in use". Can anyone explain that to me?

  • @mahamatmahamatabdoulaye893
    @mahamatmahamatabdoulaye893 2 года назад

    Many thanks Sir 😘

  • @丅-u2h
    @丅-u2h 2 года назад +1

    Isn't it safer to convert public classes to private classes if they are not used in another class? or there is a reason for it?
    Thank you for this incredible work, your explanations are amazing !😍

  • @aladin7339
    @aladin7339 2 года назад

    thank uuuuu so much, this is so helpful

  • @long3850
    @long3850 2 года назад

    very helpful video !

  • @yashwanth7978
    @yashwanth7978 Год назад +2

    Can you share the code, not able to find in the link you kept in description

  • @HAZARD_LIGHTS
    @HAZARD_LIGHTS 3 года назад +1

    I just wanted to say I love your content and how you interact with your fan base but I was also wondering how to run this program from command prompt and how to configure this for use over WAN networks.
    PS: this tutorial inspired me to make my own chat room project which has been my first real (successful) program.

    • @WittCode
      @WittCode  3 года назад

      Hey John thanks so much for the feedback! To run it over the command prompt you just have to go to where you made the java files and compile it like javac .java and then run it like java . And I have gotten a few questions about making these Java networking programs accessible over the internet and to be honest I am not entirely sure how to do it besides port forwarding or giving your server a public address. Im probably gonna take some time to look into this and make a video on it! 😀

    • @HAZARD_LIGHTS
      @HAZARD_LIGHTS 3 года назад

      @@WittCode Thank you so much, I really appreciate you taking the time out of your day to respond to my request!

  • @danielluo6499
    @danielluo6499 2 года назад

    great channel

  • @morgard211
    @morgard211 Год назад +1

    Shouldn't we rather use AtomicReferenceArray for the clientHandlers to avoid race conditions since more thread access it?

    • @romanzdev
      @romanzdev 9 месяцев назад

      You are correct, use thread-safe collections or manage synchronization

  • @heshakarathnasekara7135
    @heshakarathnasekara7135 2 года назад

    awesome video i love it thankyouu

  • @wriottter
    @wriottter Год назад

    Helpful video thanks for making this. Can you do a server PC and a client mobile phone.

  • @americancitizen748
    @americancitizen748 8 месяцев назад

    Very good!

  • @RNDev666
    @RNDev666 3 года назад +2

    tysm for this video! its great! one question tho.. at 21:14
    couldn't you check if this!=clientHandler?

    • @WittCode
      @WittCode  3 года назад +1

      Hey good to hear from you again! That is correct! And actually probably a better idea as I did not check for duplicate usernames provided by clients! 😄

    • @RNDev666
      @RNDev666 3 года назад

      @@WittCode yeah i was wondering abt duplicate usernames lol

  • @kutilkol
    @kutilkol 2 года назад +1

    Runnable passed to Thread in listenForMessage() could be implemented by lambda
    new Thread( () -> {/*code*/});
    because Runnable interface has only 1 abstract method, thus making it functional interface.

  • @ismailgunduz7
    @ismailgunduz7 2 года назад +1

    Great video, loved it. Thank you for explaining the details. Is it possible to implement this structure of group chat with graphical user interface? Actually I tried but I couldn't figure it out. It simply didn't work

  • @sebastiangard18
    @sebastiangard18 2 года назад +1

    Is it a TCP or UDP based communication? Really good Video

  • @aladin7339
    @aladin7339 2 года назад +1

    hello i have a question, what should i do to make them connect from different pcs and not on localhost. i tried some solutions but it always give me an error

  • @kutayyaman
    @kutayyaman 2 года назад

    thanks for the video

  • @dabexter
    @dabexter 3 месяца назад

    Hey wittcode, I hope you see this, I loved the tutorial, and you explained everything very well with a hands on approach, but is it possible to run the clients on different computers? If so, how?

    • @Rohan-Prabhala
      @Rohan-Prabhala 3 месяца назад

      i gotchu just run a client-like file on a different computer and use the ip address of your server computer instead of "localhost", also make sure they're on the same network

    • @dabexter
      @dabexter 3 месяца назад

      @@Rohan-Prabhala tysm, so i run the client script and not the client handler right?

    • @arunvasunny7386
      @arunvasunny7386 Месяц назад +1

      @@dabexter client handler works on the server side so that other clients can parallelly work without any error.

    • @dabexter
      @dabexter Месяц назад

      @@arunvasunny7386 thank you

    • @arunvasunny7386
      @arunvasunny7386 Месяц назад

      @@dabexter have you completed your project?

  • @salmatariq9839
    @salmatariq9839 Год назад

    I have tried to allow multiple instances of my ChatClient class but it isn't working. Can you please help me with this! Thank you!

  • @amartyasen2880
    @amartyasen2880 14 дней назад

    At 23:40 shouldn't you be doing closeEverything(clientHandler.socket, clientHandler.bufferedReader, clientHandler.bufferedWriter) ? You are iterating through each of clientHandlers, and for each clientHandler, you push the message. Hence if u encounter an exception, you should be closing THAT particular clientHandler's connections. Same logic applies when we are removing the clientHandler from the array. Instead of passing 'this', shouldn't we pass clientHandler?

  • @waleagboola5943
    @waleagboola5943 Год назад

    Hey man... I love your contents. It's so insightful. Thanks. However i can't find the downloadable code on your blog. Can please share?

  • @Gandeon1
    @Gandeon1 2 года назад +2

    Heyo, thank you so much for the tutorial!
    I have a little problem though. If I close one of the client windows and start a new one. The chat is filled with the word "null" and I don't know what would cause it.
    Any idea how to fix it? 😅

    • @zhonglin5985
      @zhonglin5985 8 месяцев назад

      Ran into the same issue. The fix is to do a null check for what bufferedReader.readLine() returns in run() method in ClientHandler.java, cuz readLine() will immediately return null if the the corresponding Client program gets terminated.

  • @vedant5541
    @vedant5541 2 года назад

    thank you so much...

  • @mnekx
    @mnekx Год назад

    Thank you for good educating content. on 21:46, could we use if(this!=clientHandler) {}?

  • @wasiuddinbhuyian5081
    @wasiuddinbhuyian5081 2 года назад

    Extremely thankful for helping us in the easiest ways but, if i want to store every one of the texts sent in a file that stays in the "Server" and whenever a new client joins he/she gets all of the messages printed from the file in the console .. to do that what are the changes i should do?

  • @m.misbahalizada9837
    @m.misbahalizada9837 2 года назад

    thank you soo much

  • @siradjeddinefisli1440
    @siradjeddinefisli1440 3 года назад +2

    the client message is not sent to all clients !!