Java Socket Programming - Multiple Clients Chat

Поділитися
Вставка
  • Опубліковано 7 січ 2025

КОМЕНТАРІ • 307

  • @f3sa899
    @f3sa899 3 роки тому +73

    I think this is the best video on UA-cam about I/O streams and sockets.

  • @GiyuTomiokaTheOneAndOnly
    @GiyuTomiokaTheOneAndOnly Рік тому +4

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

  • @amc1140
    @amc1140 3 роки тому +48

    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  3 роки тому +4

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

    • @amc1140
      @amc1140 3 роки тому

      @@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 4 місяці тому

      @@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

  • @romanzdev
    @romanzdev 10 місяців тому +5

    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.

  • @uuo4930
    @uuo4930 2 роки тому +31

    This truly explains everything so clear, thanks man

  • @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

  • @pawe7420
    @pawe7420 2 роки тому +2

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

  • @imanjallali8258
    @imanjallali8258 2 роки тому

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

  • @GrayaaJaweher
    @GrayaaJaweher 2 місяці тому

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

    • @WittCode
      @WittCode  2 місяці тому +1

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

  • @jadabouzeid9165
    @jadabouzeid9165 2 роки тому +3

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

  • @YvanNoah
    @YvanNoah Місяць тому

    Best video out here, thank you kind dude

  • @UninspiredFilm5
    @UninspiredFilm5 6 місяців тому

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

  • @irinatrandafir7390
    @irinatrandafir7390 2 роки тому +3

    You explain everything so well and simple ♡

  • @spenzr6920
    @spenzr6920 Рік тому

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

  • @wriottter
    @wriottter Рік тому

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

  • @jackinquisitor9645
    @jackinquisitor9645 2 роки тому

    Thx for your tutorial, I finally understand how socket work

  • @freddiewittmann1494
    @freddiewittmann1494 3 роки тому +1

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

    • @WittCode
      @WittCode  3 роки тому

      Thanks for the support Freddie! 😎

  • @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 :)

  • @cristiangligan-ignatescu771
    @cristiangligan-ignatescu771 4 місяці тому

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

  • @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! 😃

  • @tungle3635
    @tungle3635 3 роки тому

    thank you so much, this content deserves much more credit

    • @WittCode
      @WittCode  3 роки тому

      Thanks so much! That means a lot! 😃

  • @mosesfrancis4976
    @mosesfrancis4976 Рік тому

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

  • @Romainfaure
    @Romainfaure Місяць тому

    Thank you! Awesome video and explanation!

  • @harrygabbi5181
    @harrygabbi5181 2 роки тому +1

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

  • @bhpure30
    @bhpure30 9 місяців тому

    great video, wonderful explanations throughout too.

  • @rnyah_
    @rnyah_ 2 роки тому

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

  • @nadiiar75
    @nadiiar75 2 роки тому +1

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

  • @motodankz4838
    @motodankz4838 2 роки тому

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

  • @uzumakiuchiha7678
    @uzumakiuchiha7678 Рік тому

    Nice one man. Keep it up!

  • @premkarki2
    @premkarki2 9 місяців тому

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

  • @borissmax3
    @borissmax3 2 роки тому

    Thank you! Learned a lot from this

  • @angelinawho5551
    @angelinawho5551 3 роки тому

    You are lifesaver man, thank you a lot :)

  • @g.722
    @g.722 3 роки тому +1

    Very helpful! Thank you so much!

  • @haris7521
    @haris7521 2 роки тому

    This is simply awesome man 👍❤️

  • @vasantpatel9297
    @vasantpatel9297 2 роки тому

    this is briliant my friends thank you so much

  • @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

  • @bovich9457
    @bovich9457 Місяць тому

    Thank you for this excellent content.

  • @arthurbakker740
    @arthurbakker740 8 місяців тому

    Great content, learned a lot!

    • @bernardkingsley8598
      @bernardkingsley8598 8 місяців тому

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

  • @charlesjaussaud1822
    @charlesjaussaud1822 2 роки тому

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

  • @ritchiemaegamot9460
    @ritchiemaegamot9460 10 місяців тому

    hi, how did you end one client using the command line? At time 2:01. I tried it using Ctrl+C in mac and the server generated a NullPointerException as soon as that client terminated using Ctrl+C

  • @danielgitonga9478
    @danielgitonga9478 2 місяці тому

    Great video all the best

    • @WittCode
      @WittCode  2 місяці тому

      Great to hear! Thanks for watching

  • @mc_mzcgt
    @mc_mzcgt 3 роки тому

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

  • @fab_15ger40
    @fab_15ger40 Місяць тому

    thank you! I liked this video.

  • @mihaioprea9398
    @mihaioprea9398 2 роки тому

    Great video! Really helped!

  • @0brooo
    @0brooo 2 роки тому

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

  • @celerisBackendFramework
    @celerisBackendFramework 9 місяців тому

    thanks a lot bro, keep the good job.✌

  • @akalankaalutwela7712
    @akalankaalutwela7712 3 роки тому

    Thank you very much for this!

  • @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

  • @amartyasen2880
    @amartyasen2880 Місяць тому

    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?

  • @chetan788
    @chetan788 Рік тому

    video is very helpful. Thank you.

  • @hvasomhelst
    @hvasomhelst Рік тому

    thank you so much, saved my homework truly!

  • @Tygelin86
    @Tygelin86 6 місяців тому

    Great tutorial!

  • @replikvltyoutube3727
    @replikvltyoutube3727 2 роки тому

    This helped me a lot, thanks!

  • @mnekx
    @mnekx Рік тому

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

  • @freddierobinson9587
    @freddierobinson9587 Рік тому

    this was perfect for me thank you

  • @damiaotiktok023
    @damiaotiktok023 11 місяців тому

    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

  • @sirojiddingroup
    @sirojiddingroup 2 роки тому

    Thanks bro it has been very usefull for me

  • @karolinemalko1723
    @karolinemalko1723 3 роки тому

    thank you! Subscribed!

  • @elishaamenuveve4307
    @elishaamenuveve4307 3 роки тому

    Great video!

  • @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?

  • @aladin7339
    @aladin7339 2 роки тому

    thank uuuuu so much, this is so helpful

  • @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?

  • @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();" ?

  • @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

  • @AlexKayzProductions
    @AlexKayzProductions 3 роки тому

    Great tutorial, thanks

  • @Asswipe69
    @Asswipe69 3 роки тому

    Nice tutorial man, rly need something like tihs :D

    • @WittCode
      @WittCode  3 роки тому +2

      Thanks so much! Also, love your username lol

  • @heshakarathnasekara7135
    @heshakarathnasekara7135 2 роки тому

    awesome video i love it thankyouu

  • @long3850
    @long3850 2 роки тому

    very helpful video !

  • @t2x2_highlights
    @t2x2_highlights 2 роки тому

    Thank you very much, man

  • @cyndi_cique
    @cyndi_cique 19 днів тому

    hi, thank you for let me learn something in this video.
    i am using Eclipse IDE to run this application. i found the port and the localhost issue in Eclipse IDE i am using in. I dont know how to make changes to it i tried to use some method in some reference book but it still pops up this window"PORT cannot be resolved to a variable".

  • @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

  • @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.

  • @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

  • @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)

  • @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'

  • @sebastiangard18
    @sebastiangard18 3 роки тому +1

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

  • @yashwanth7978
    @yashwanth7978 2 роки тому +2

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

  • @morgard211
    @morgard211 Рік тому +1

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

    • @romanzdev
      @romanzdev 10 місяців тому

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

  • @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!

  • @piptarou
    @piptarou 28 днів тому

    Maybe I missed it, but why did you write out the closeServerSocket method and not use it?

  • @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

  • @americancitizen748
    @americancitizen748 10 місяців тому

    Very good!

  • @mahamatmahamatabdoulaye893
    @mahamatmahamatabdoulaye893 2 роки тому

    Many thanks Sir 😘

  • @vishnusudarsanam5375
    @vishnusudarsanam5375 2 роки тому

    Real gem!!

  • @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?

  • @丅-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 !😍

  • @wriottter
    @wriottter Рік тому

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

  • @danielluo6499
    @danielluo6499 2 роки тому

    great channel

  • @const71
    @const71 2 роки тому

    If closing the socket also closes both the input and output streams, why are you closing them in addition to closing the socket in 26:30?

  • @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?

  • @ihsannuruliman3656
    @ihsannuruliman3656 2 роки тому

    is there any difference if we use other io classes such as printwriter, datagramoutput, bufferedoutputstream? I got confused sometimes when I work with other io classes for Java Socket, it doesn't work. The io classes don't input nor output the given string.

  • @igormanolescu5910
    @igormanolescu5910 9 місяців тому

    how come the same socket in client that sends a message doesn't receive one? I know that we look in arrayList and avoid that but it should work based on the code from the client.java

  • @salmatariq9839
    @salmatariq9839 2 роки тому

    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!

  • @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

  • @mige5fin
    @mige5fin 2 роки тому

    Tried to adapt this to my game, but only managed to get the server to register the connections, but the clients didnt seem to receive anything. Dunno if the issue was caused by the gui or what.

  • @LighterST
    @LighterST 3 роки тому +1

    What would be the best way to add latency to all the clients receiving a message? Like, if one writes a message, everyone receives it 5s later?