How To Build A Custom TCP Server In Golang!?

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

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

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

    ► Join my Discord community for free education 👉 discord.com/invite/bDy8t4b3Rz
    ► Become a Patreon for exclusive tutorials👉 www.patreon.com/anthonygg_
    ► Buy me a coffee 👉 donate.stripe.com/aEU2a6ayH2uCa3u4gg
    Thanks for watching

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

    I am so glad I found your channel.

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

    Thanks for the video! This is just what I was looking for

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

    Holy Shit...Just few days before your Subs. Were 2k now it's 3k .. Congratulations Anthony for This Badass videos🍻

  • @joewilliams8286
    @joewilliams8286 Год назад +5

    Thank you for creating the video man! Really enjoy your teaching style, +1 sub

  • @야니스-l6b
    @야니스-l6b Год назад +5

    I got a lot of inspiration from looking at your code. thank you

  • @exiit423
    @exiit423 Год назад +5

    Good example, but there is a major bug in the code: The "buf" slice is being reused, but the buf is not copied before it's sent to the channel (msgch). buf[n:] only creates a new slice pointing to the same address but with a different length.
    TCP already comes with backpressure so I'm not sure how much use there is for the extra channel. But if you want to use a channel, allocate a new slice (buf) each iteration.

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

      Yes. That a bug. Good catch.

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

      Thank you for your comment! I'm new to golang and was wondering why the channel data is being overwritten if I allocate small buffer and send a message longer than the buffer size. All makes sense now.

    • @justmeandmy
      @justmeandmy 10 месяцев назад

      Another option is to bring the buf declaration into the for loop so one exists per loop iteration.

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

      Shouldn't it be fine in this case? conn.Read() is blocking and so is the channel send operation. Since a separate go routine is spun up for every client, there shouldn't be a way of overwriting each other's data.
      A copy is created when it gets sent to the channel, and there's no way for other client's or new messages of the same client to interfere with the value of the buf until it gets to that point (basically buf will stay the same value until the copy into the channel has been made, it can then read again from the connection).
      Correct me if I'm wrong though, still new to go...

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

    Exactly what i was looking for

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

    Great tutorial, thank you.

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

    Thanks a lot! I like your style.
    It would be interesting to watch about vim shortkeys that you use.

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

      Will make one !

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

      @@anthonygg_ I will also love if you could make a vim setup tutorial and all vim plugins you are using.
      In my company I do ssh to a server and I don't have sudo access and internet is blocked to that server, I can SFTP files from local device to that server if you could help in setting up vim with these constraint then I will be thankful. Maybe I asked too much :)

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

    hey man, i loved the video, thanks a lot !

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

    Lekker hoor Tony!

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

    Please make video about your programming environment setup.

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

    Thank you for a nice tutorial

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

    Hi, I want to thank you by providing this tutorial, It helps me a lot. May I confirm something? Is the reason you put goroutine of readloop() inside acceptloop() is for handling multiple message in the same connection?
    So lets say you send a request to the server, but the server still can receive another request while processing the first request isn't it?

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

    man verrrryyyy helpfulll thanks

  • @hienluongvi3533
    @hienluongvi3533 10 месяцев назад

    i have a question
    at 07:15
    as i understand, the for loop inside readLoop function will keep reading data from connection by using conn.Read
    can we put read message process to goroutine?
    what will be the different between using goroutine and not using goroutine at this situation?
    thanks,

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

    awesome stuff !

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

    Great video

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

    thx so much for the video)))

  • @justmeandmy
    @justmeandmy 10 месяцев назад +2

    "I dont know how to close telnet"
    It literally hints you how each you make a connection.
    "Escape character is '^]'."
    that is "control-]"
    Then you will get a telnet> prompt ... type "quit"

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

    Hell yeah watched an ad for you haha

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

      I hope it was a good one 🎉

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

    Close telnet with ^] or CTRL+]

  • @peter.teslenko
    @peter.teslenko 2 года назад +7

    Ctrl-L - clear terminal

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

    love your content again, when will you bring some Rust stuff? Also when would you pick Rust over Go and vice versa?

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

      Will do some Rust this week!

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

      @@anthonygg_ cant wait!

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

    I didn't know GSP had a youtube channel about programming xD

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

    Thanks a lot

  • @RavikantKumar-h9y
    @RavikantKumar-h9y 8 месяцев назад

    you are gowsome !!

  • @Kisme-e9f
    @Kisme-e9f Год назад +3

    7:44 I'm getting a deadlock error!
    goroutine 1 [chan receive]:
    main.(*Server).start(0xc0000c9f48)
    D:/projects/tcp/main.go:32 +0xc5
    main.main()
    D:/projects/tcp/main.go:67 +0x5c
    exit status 2

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

      how did you solve this problem?

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

      Same here

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

      You probably fixed this by now (or moved on to something else!) but this error might be from not calling "go s.acceptLoop()" in Start().
      Anthony doesn't get this error but he fixes this a little bit later in the video

  • @Kunal-k-u-m-a-r
    @Kunal-k-u-m-a-r 6 месяцев назад

    how about creating alternative open source for openssh

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

    Quick off-topic question. Is it a good to idea to use TCP for my backend app so I can build native desktop GUI and use it? GUI connects to my go backend app via localhost tcp. Anyway, great video, will use it for my pet-project as an example. Thanks!

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

      I would use json api for that.

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

    I got my channel back Anthony! Let’s do one where you teach me go and I teach you functional js

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

      What happened with that channel?

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

      @@anthonygg_ it got hacked, then deleted. youtube is slowly bringing it back to life
      i havent had access in a few weeks now.

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

      @@agenticmark what about all your subs?

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

      @@anthonygg_ gone for now, we will see what happens

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

      @@agenticmark thats to bad. Keep going they will come back

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

    Unable to accept your discord community invite

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

    tks!!

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

    github code repo?

  • @VijayChintapandu
    @VijayChintapandu 6 месяцев назад

    Where is git repo for this video.

  • @veereshpatel.46
    @veereshpatel.46 2 года назад +2

    Please add timestamps

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

      The content is already free, now you want it with stamps?
      It’s a 19 min video dude.

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

      Consider paying him some money 💰.

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

      guys chill, expecting a youtuber to annotate his own video with timestamps is not unreasonable. Also timestamp is useful when rewatching. I don't want to scroll on the timeline blindly, guessing which part discusses XYZ. Timestamps make the video more accessible and user-friendly, saving viewers time.

  • @dejanduh2645
    @dejanduh2645 6 месяцев назад

    You didn't show how to use the quitch

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

    tpc or tcp? 1:28

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

    why do you keep moving your pointer when you are writing? it is very distracting haha. Apart from that good video!

  • @Sammysapphira
    @Sammysapphira 6 месяцев назад

    Aggravating variable names
    Ho wld it feel to hve wrds typ lik this