Networking in C++

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hey guys my name is China welcome back to my C plus plus Series right so you're sick of being alone you just you need to connect with the world this whole solo thing you said it was good you said you loved it but it's over and now now you want to connect to other computers what use is the world if we're not connected so many quotes so many great quotes So how do you write programs in C plus that are capable of communicating communicating with the outside world communicating with other computers on your local network how does one learn the art of that well you've certainly picked like the best language for the job I mean c plus Plus's library has everything including oh there's no there's no there's no built-in networking I don't know why I decided to treat this video like a TV show I'm sorry but yeah it's true like C plus plus has no built-in networking at all you have to use the operating system apis like the win32 API for example if you want to use sockets and any other things that let you communicate with devices every other language you know I don't know like c-sharp Java python they all kind of have you know that built in but sure you know C plus plus ubu never change C plus plus do people say that anyway I'll stop just in a joking mood today um so first of all let's kind of talk about what I mean by like networking in C plus like what does that mean basically what I'm talking about is using sockets now these sockets can be used to transport data from one place to another and it could be as simple as like even on the same computer you know you could open up a socket that can receive data and you can send it like from that same kind of computer that's called like a loopback you could also communicate to another computer on your local network so that doesn't involve the use of something called a wide area network or a Wan it's just kind of on the land the local area network and in terms of like networking Hardware you could just have like a switch or I mean you could even use one of those ethernet cables I remember we had back in the day it's like instead of being like uh what's it called you know they were like red or something ah here we go a crossover cable that's what it's called an Ethernet crossover cable oh man that just brings me back to like high school when we want to play like you know a lan game but they'd block it or something in the firewall on the local network I guess at school and so we had to like people tried to like connect ethernet cables one computer to another and it wouldn't really work because I think that I mean the wiring has to be different so you need like a special cable anyway a little bit sidetracked here but then it could also be like across the internet and of course that involves like using a router and like the things that could go wrong there like you might need to afford your ports might need to tame your firewall a little bit you could obviously just use like a server you know like from hosting out the sponsor of this video which we'll get to later but that's basically what I'm talking about and I'm not gonna go into like the deep deep fundamentals of networking a because I'm not an expert on that stuff and B because I just kind of want to practically show you how you can just get this working even though I love having a deep understanding of things and teaching that wherever possible I feel like that's not always necessary and at the end of the day you just kind of want to write code that's just like send data to this address please and receive data as well and as long as you can write that code and it works like you can get on with your day and and make the thing you're actually trying to make so yeah so that's basically what we're going to be talking about today what we aren't going to be talking about today but I do want to cover this in a later video is stuff like HTTP so if you want to just download information from a web server via HTTP so you can kind of you know make get or post requests or stuff like that or everything to do with the kind of HTTP protocol and yes I know the p and HTTP stands for protocol but it makes more sense if you say in the HTTP protocol instead of in the http I mean I don't know maybe maybe I should say in the HTTP yeah so that will cover in a different video so today is basically all about how do I send data from one thing to another and also be able to receive data from that thing we're connecting two things together I mean honestly it's gonna be more than two things it's gonna be like one thing acting as their server and then all these clients as many as you want really limited by I guess Hardware connecting to that one thing so a server client kind of architecture and you can just send whatever you want really between the two in either a reliable way or an unreliable way so how can we do that in C plus now there are a number of networking libraries in C plus plus and I guess drawing from kind of like the time that I made the like the best way to make desktop applications in C plus plus video which I'll link up there by the way I don't want to use libraries like qt or cute I don't like there's this other thing called asio which to me just like reminds me of the audio driver to be completely on but there's burst ass here like anything with Boost in it like I don't want to do that you know you feel me that's just my vibe I guess that's just what I'm it's just who I am and speaking of who I am I mean I'm a I'm a game engine programmer like I make game engines and I like making games so that's kind of the world I live in so that's that's what I'm gonna base my recommendations on that's what we're gonna kind of do today we're going to use something that's going to be compatible with you know a game engine and how you do things in a game engine much like that desktop applications and C plus video because you've come to my channel you've come to my world so the library that we're going to use is actually by Valve by Valve software you know like Steam Half-Life Counter-Strike Team Fortress I don't know what are they doing these days just making money from the steam commissions I guess the steam cut they have a library called game networking sockets here it is on GitHub it says failing but it's it's actually a good library and it's succeeding in my heart so this thing is just on GitHub like for you to use you can see that you can send reliable and unreliable messages over UDP so it doesn't use TCP but it works like TCP so it's not only Bound by the potential limitations of TCP it just kind of uses the UDP protocol the UDP which is important for kind of games and performance that kind of stuff it's got some really great features you know I'll leave a link to this obviously in the description below check it out for yourselves and even though like in the API the word steam is used like a lot it does not require Steam and the license is also extremely permissive so you can you can of course use this outside of steam for whatever you like and that's what I did I thought the best way to kind of put this into action and like create a practical example this would be to just make like an application so I made my own like instant messaging chat application yeah like Cherno chat back in the day the network chat programming series for those of you who are ogs on my channel oh it's just coming full circle isn't it except this one's called Walnut chat instead of China chat Cherno chat is that's vintage you know that's like weird that's Legacy stuff we don't touch that so that's what the rest of this video is going to be about it's going to be about how I made that application I'll walk you guys through my kind of development journey of that uh but like yeah it totally works I'll leave the link obviously to all of the source code that's on GitHub you can also download the release and like I'll leave the server up for the time being so you can actually connect to like this URL using the client which you can download and like you can you can yeah I mean it works I mean is it like a hundred percent secure and are people going to hack it probably but hopefully the code is going to be like a good example and a good starting point for those of you who want to develop something like this where you can just arbitrarily send data to and from a client server and uh yeah like in a pro about like you know GUI application so coming back to the beginning of all of this I knew I wanted to make a chat application just because I feel like a chat application like is it's almost like a hello world of like networking like if you want to send data to and from something like sure you could integrate into a game maybe but like I mean even games have chat usually like text chat so it kind of makes sense that you would create some kind of chat client at least that's what it feels like to me and so luckily for me and actually to further my point there's an example that is included with this game networking sulcus repository that is this example Chat thing and it's a command line program you can download it's all entirely within one file and you just start it with like a command line argument of either like client or server depending on what mode you want to run it in and that's it that's your chat application so that's kind of what I based this on however like it ended up being something completely different I ended up kind of learning a lot from that and abstracting that into actually a separate module for Walnut called Walnut networking because I knew that I wanted to use Walnut as like the core Library since I I wanted to have like a GUI here and by the way if those who don't know what Walnut is Walnut is kind of like my application framework that I created which I ended up updating quite a bit actually for this video and for this project so this video is going to end up being like a high level overview of all the different moving parts and how they come together to make this Walnut Chat thing happen we'll start by taking a look at the actual game networking soccer's library and how to get started with that as well as how I took that and integrated it into walnut walnut networking and then the separate kind of client application and server application we'll have a look at the actual game networking sockets API and I'll talk about how that went into Walnut networking and how I used it you know to actually establish connections and data to and from Severin client that kind of stuff the server application obviously needs to be able to run you know like on a server so we'll talk about a headless configuration for Walnut which enables it to be run inside a terminal how I got the server compiling on Linux and this kind of Linux yeah if you can see it this is a this is this computer over here is a a a Linux computer that we have in the office how I got headless wall not running there like inside a terminal with that game networking sockets Library so that we could have the server there and then finally we'll deploy it onto an actual real hostinger server and that's how the whole chat dot the general.com thing that you guys can connect to that's what's currently running now hosting were nice enough to sponsor this video and provide us with a server to use which is great because they provide full route access giving us complete control over our server I mean we could even use it as a Dev machine like if you don't have a Linux machine you can just use one of their servers and build your code there that plus the fact that they use nvme drives and AMD epic processors mean they're always a pleasure to use they're just fast and responsive we'll cover setting one up later in this video as part of the deployment so we'll kind of have like a nice big overview of the whole process now for those of you who would like more detail like I am planning to make some deeper videos but just leave some comments Below on what you'd like to see and I'll try to make that happen step one the library so game networking sockets on GitHub all of the source code here important as all always to read the license make sure that you can actually use this you can see it's the bsd3 license so pretty good now usually what I'll do while this is cloning is take a look at the building section in the readme it's amazing how often people don't do this instead of just like seeing a cmake file for example and being like I'm just going to see make this it's really important that you just take a look at the building under the readme especially when it like you know has its own page like this uh because it covers like all the dependencies and stuff it tells you how to build it on Linux which we know we're going to have to do later but since we are on Windows that just happens to be my kind of default development environment and also I obviously want to run the client on Windows as well you can see that their recommendation here is just to use VC package for that I'm not a huge fan of VC package but when I'm building other people's libraries especially ones that are fairly complex like this one like it's got plenty of dependencies such as openssl and B Crypt and like protobuf and a bunch of other stuff that I don't want to deal with I'm just going to follow their recommended build path and there are manuals instructions like if you don't want to do that but like that's a lot of extra work it's really nice when developers actually spend some time to guide you through every step of building something like this once we've cloned the actual game networking circus repository you can see that it guides us through every single command line like step that we need to run through so we just kind of Clone VC package right there into that game networking sockets repository and then we launch a video Studio like developer command prompt which is this special thing that you can do if you just like hit start and search for developer command prompts you'll probably find it and then we just like run these commands now one thing that I did do differently was they in this example just show using ninja as the kind of build system I guess for this so they'll use cmake but they'll generate like ninja build files and then actually build using ninja that's cool but I wanted to use Visual Studio might as well so I just changed this to be like you know Visual Studio basically I think it's like Visual Studio 22 or something I don't know just the normal kind of where you would get cmake to generate you know instead of a ninja build files it would generate a visual studio solution and Proto files and so once that was done I could just open Visual Studio I could build like a debug configuration a release configuration whatever really I wanted those kind of built binaries that's what I use to link into Walnut so I didn't bother actually trying to get this to work within Walnut itself for larger kind of third-party libraries I just like to build them like Standalone and obviously like I'll I'll retain and make sure I have access to all of the source code in that separate project just in case I need to build it with a different compiler or for a different platform but I still like to keep that Standalone because integrating this into like walnut would be much much much harder and also quite frankly just unnecessary so once that was done I took a look at the examples so as I mentioned there is this chat example I just had a look at this like in Visual Studio made sure I understood it ran through like most of this code this one file as I mentioned earlier actually has both the client and the server in it so the idea areas like the usage let's see if we can find the usage here here it is print usage and exit so basically you called you you call this through the command line and then you just say client or server and it runs whatever configuration you want and you can see that obviously it like starts either this chat client or chat server class so if we go up and take a look at this you know this is obviously what starting the server does and that's the steam networking kind of API in use and this is kind of what I used as a reference to determine what I needed to actually set up inside Walnut networking for the client and the server API okay so for step two I had to set up a new Walnut project uh I have this Walnut app template over here on my GitHub this is an actual template that you can use you can just hit use this template create a new repository I went through this to create this kind of Walnut chat repository and that way I got everything kind of set up for me which is great here it is networking and CPP that was the original name before I came up with this whole Walnut Chat thing and then I just kind of tweaked the build scripts I actually ended up doing quite a lot of work here because I also needed that headless configuration which we'll discuss in the future but I basically ended up creating a few different projects Here app Client app server app common which sits between these two and then inside Walnut this kind of Walnut networking module and you can see that this actual Walnut networking module this is kind of what ends up linking this game networking sockets Library I'll put up a little diagram so that you can see how all of these kind of projects are linked together now I thought it would be useful to also quickly cover what the actual steam API even looks like again I would recommend you just look at that chat example that is inside the game networking sockets repository but basically if we look at the server class inside Walnut networking module you can see that the first thing we do is try and initialize game networking sockets we then create this kind of interface from it this will actually create a different interface depending on I guess the version of the library but also whether or not you're using it in conjunction with steam because you can use this with steam but you can also use it completely not having anything to do with steam like we are here we're then going to just set up this kind of local address with a port any kind of configuration options we want and then we create this listen socket IP which is going to be using that port and options and stuff that we specified now this interface this steam networking sockets that's like your API that's what you use to call any of these game networking sockets API commands so here we're using it to create a list and socket IP we create something called a poll Group which at the moment again will not we'll just create it for you but that's basically like a group of clients that you can use to I guess more efficiently process messages from and send messages to I mean like one thing I didn't mention is that you can see I'm in the header file now this is the I steam networking sockets.h this is like the whole API basically and you can see just how good this header file is like a look at this documentation it's all here it's wonderful I love this so you can see what poll groups are poll groups a poll group is a set of connections that can be pulled efficiently and you'll see us kind of using that a bit later so we try and create that and then we just set up a while running Loop which every iteration will sleep for 10 milliseconds just to kind of reduce server load that should probably also be configurable follow incoming messages well you probably guessed it it'll try and receive messages from our poll group that we created and then if there's no messages we just break out of this kind of while running Loop because if we have more than one we'll kind of iterate multiple times less than zero I think is a critical error because that's what the example seems to suggest and then this kind of message that we receive is stored inside this and that's got a size so this is the size of the message and then it's got a data pointer which is the data for the message so you can see we can immediately just create like a walnut buffer out of it and then just call the data received callback so that's kind of incoming messages the other really important part though is this kind of run callbacks thing which that will invoke all the Callback functions queued for this interface which really is this which is really really important I guess unless you're using steam so what that will do it'll call this kind of connection status change callback which will redirect to this function and that will look at the connection state that has possibly changed so this is important because this lets us handle client connections and disconnections so like if someone's trying to connect we can choose to accept that connection if that fails you know we'll close it whatever and then assign that client that poll group and also you know call Our Kind of Walnut callbacks and stuff like that but you can see we also registered that connected client and we end up storing them inside the connected clients map so that we can then do things like send messages to everyone and just have a record that that client even exists and is currently connected that's really all there is to this game network in soccer's API like of course it's got many many more features but at its core that's how it works and the client side of it is very similar the only real difference is that instead of create listen socket IP we call connect by IP address like that's kind of it you have the same kind of income pulling incoming messages except there's received messages on connection instead of on poll group uh there's still the same connection status changed situation so yeah that's kind of the API so once I heard all of this running and I was kind of happy with the features that I had both on the client and the server more or less I knew that since I had to have it run on Linux and in a terminal like without I am gooey without Vulcan without the UI because the end game was of course deployed onto a hostinger server which is just like a regular you know Linux server that doesn't have a GUI at all so I knew that this clearly wouldn't work at all I needed to set up a version of this server that ran just as like a command line application and so to make things easier I just did it here on Windows I didn't bother like moving onto like some kind of Linux development environment or anything like that I'll just get it to work here like as a command line application on Windows first then I'll make it work on Linux then I'll deploy it onto the server and so that's where this kind of networking and CPP headless was born and just this whole concept of Walnut being able to be built in a headless configuration now a headless configuration by the way means basically command line program so no UI no no window no windowing Library no Graphics API like Vulcan or whatever just pure terminal kind of command line goodness and so you can see that in this project what we have is all not headless while not networking That Remains the Same um and then we have the server app and guess what this is the exact same server app the only difference here is that it will not set a menu bar callback which has I'm gooey stuff because we don't have I'm GUI uh the wall art application is a bit different so you can see it includes either application headless or application GUI depending on what configuration we're building in and by the way application to headless and application GUI they're under platform either GUI or headless meaning that we can just not build platform GUI if we've got a headless configuration I might make a separate video about how this headless stuff works because I don't want to take up too much of this video for that but the really cool thing is that like again it's exactly the same code like this is not a duplicated file that's why it has these kind of if and Def headless and stuff because like this code obviously won't compile what I thought was also really cool is that there's actually a different console so we have that UI console and we have a headless console as well and this headless console matches this UI console in API perfectly which is why inside have this app file Whenever I Call console dot like add message or whatever like it doesn't matter if it's a headless console or a walnut UI console like the API is just identical and over here where we also set a message send callback that's also identical so if we type in a message into the UI console hit enter it calls our send chat message and then if we do the same thing but inside the terminal and hit enter same situation so that's great because we don't have to change anything like this code doesn't even know if it's running headless or not which is fantastic and if I just demonstrate that for you guys by running this uh then here we are you can see it's exactly the same as like what that UI version looks like um and I can type here and I'll receive messages here um and everything works the same way so once I had that running on Windows and obviously this actual like binary that gets built here that doesn't link Vulcan that doesn't link I'm GUI nothing I knew that it was basically ready to be run on Linux I just needed to make sure that I you know made sure that the the build scripts there was also like a version here that will build it for Linux using clang because that's what I wanted to use you can see It'll call build headless and I decided to use gmake2 which is a remake build platform I guess that will generate these kind of make files that I could then just run to compile the program because I didn't really want to bother using an ID inside Linux this is a fairly simple project okay so over here on the Ubuntu computer to build game networking sockets just go down to the building inside the GitHub repository and there's a Linux section very very easy to build this on Linux compared to Windows I mean I guess VC package wasn't that difficult but this is easier all I did was this and then you can use ninja or just normal mag files to build it now in order to build our actual server our Walnut chat server basically what I did is I just modified the pre-mag files to where necessary also have a Linux configuration for linking so you can see over here that I'm linking the game networking sockets library from this path and of course this is the path where I put the binary that we built by building game networking sockets on Linux once that was done inside the scripts folder there's this setup.sh file if I just run that and then that's going to run pre-make to generate those gmag to kind of build files so now what we have are these make files everywhere so like app server you can see also has it we basically just use pre-make to generate those make files so if we go back a directory now we can just run make and you can see it's going to start building our server and all of the dependencies as well so Walnut headless well not networking app common headless app server headless all of those are being built this is just in a debug configuration but you can see it's done it's linked to successfully and now inside the bin directory debug Linux app server headless we have our app server headless file and this is just me copying the dynamic Library manually into this directory so that we can then basically take these two files a little bit later on and put them onto our server obviously before we deploy this onto our server it would be a good idea to just try kind of running it locally over here that's what I did I made sure that I could communicate over the local network between this computer running like the server obviously on Linux and then also my Windows computer once that was all working I was say it's basically ready to be deployed onto the server now I am planning to make a bit of a deeper Linux video where I'm going to be adding like Linux GUI kind of support to Walnut because Walnut at the moment only supports Windows we have this headless Walnut configuration now which does support Linux that's how this is working but I still want to be able to run like the chat client on Linux you know using imgui and Vulcan and rendering just like we do on windows so if you want to see more Linux videos and walnut kind of related stuff let me know it's time to deploy this onto a real server that's where the sponsor of this video comes in hosting us so hosting it has a bunch of really nice server plans that we can use here uh we're going to need a VPS we don't have to worry too much about choosing you know a more expensive plan you can just go with like the cheapest plan and then just upgrade uh their prices as you can see are pretty good uh but if you have a coupon code which you guys do you type in a Cherno here and hit apply and then once that's ready to go we can just hit setup follow the prompts I guess I'll set one up in the US I usually try and pick whatever's closest to like where most of you guys are I'm just gonna go for a plain OS to be honest we're gonna go with Ubuntu uh we can give it a name uh root password so definitely not share this with you guys save and continue finish setup now we'll wait and actually in the meantime just open up a command prompt and we'll get ready to ssh in so SSH and then whatever the IP address we get assigned to the server will be That's How we'll get in all right so once that's done let's hit manage server there's the IP address let's copy that back in here SSH right into that uh hit Yes actually forgot to say do root out let's cancel that so SSH make sure you do root at and then that so that we log in as this user we put in our password our root password which uh seems to have failed but I forget my root password already I just made it now you can actually update your root password which is a useful feature ah 10 minutes that's really okay it's done all right that was good that took like 10 seconds let's try and log in again uh okay we're in I don't know what happened there I don't know I don't know what I must have entered maybe I made a mistake during entering my reports but anyway so there we go we're on the server now yeah uh from here there's several different ways we could get access to our code obviously if you're just using git and something like GitHub or gitlab you can just do like get clone and just check out your repository that way now this is a fresh server so I don't think we we don't have it so you'll have to do like uh let's do a pseudo update first let's make this full screen um and then we'll just do uh you know install git yes um and then there you go gets installed if you've got like a binary release that you've already got compiled like we just did you know on that computer behind me you can just download that from a web server so if you have it like as a release on GitHub for example you can get it from there just using using wget or something like that if you've got it locally you can just use FTP to upload it uh I think what I want to do is I'm just going to pull it off that computer and upload it like to the server uh okay so I've just uploaded it using filezilla um I made a directory called app and then in here you can see that we have um the app server headless and then the dynamic Library as well now this is currently root um and it's also not marked as executable so if we try and execute it it's not going to let us so let's just do a pseudo CH mod plus X into well probably everything here to be honest if we take a look now they're executable um they're root you don't want to run this as root definitely not that's just honestly a disaster what you want to do is make a new user only give them access to like a certain directory and then run this as that user because that will prevent your program from destroying the rest of your server and because connection to the network it could be a potential vulnerability I'm not going to do that here because I don't care about this server no offense to hostinger because this is obviously just a demo but you definitely don't do this I'm just being lazy and I probably shouldn't be so if we try running it now um it'll tell us error while loading shared libraries now this is something like I mean look the library is right here so you might be like why is this happening the thing is on Windows dlls in the same directory as your exe just get picked up automatically that's just how it works that's not quite the case for Linux uh at least I mean in my experience it hasn't been I don't know maybe I'm missing something so what I like to do is there's this like user lib location that you just have with a bunch of different libraries I think what I did on that computer is I made a directory called like local or something and then I ended up basically taking this which remember is an app slash that so if I just do copy app slash that into here um you can see I now have that here uh and then we can type in export LD Library path equals this path that we've just kind of created so I'll just paste that in run sudo ldconfig and that's it that should have hopefully work so if we go back to app and uh I guess we'll just put it in here and we try and run that uh you can see it's got a different file that it can't find because I've got to grab that one but this is actually kind of distributed in a package so we don't really need to handle that manually if we don't want to uh you can run sudo apt is it list yeah let's cut that pseudo apt list and then we can just grab Proto buff or something so you can see there's quite a lot that we can actually use here let's try this guy this is my strategy for just getting this to work uh okay so after doing some like Googling uh protobuf compiler seems to be the thing we want so sudo app to install that 50 meg okay not bad that includes a bunch of dependencies the protobuf has as well of course um and now maybe if we run our app server headless we did it look at that it's running hello uh okay so now I suppose we should try connecting to this uh let me just keep this here this is uh very exciting let me grab this so this is our this is the Headless one I want the GUI one so that has the client okay so there's app client sure let's just hit F5 I'm very excited this is our server over here okay here's our Walnut chat client let me pick a name yarn orange of course uh and if we go back to hosting art real quick just to grab that IP address we can just put that in now we know it's going to be Port 8192 so let's type that in 8192 connect connecting we're in hello look at that hi and we get that over here um okay let's start another instance of this so if you right click go debug start a new instance a lot of people don't know that it's handy you can see it loads our settings but now let's connect as Cherno who will be green for some reason connect and we're in you can see we download our yarn Hello message let me just set this up a bit better ah it's all very exciting when you finally see it working for the first time hey man then you spend hours talking to yourself now that's the next step really what's up so this is a three-way a three-way chart between Cherno yarn and server um okay so let's try kicking someone let's kick Cherno Cherno okay so user channel has been kicked you can see it's brought up the connection uh dialogue you can just rejoin by the way that's no stay out I accidentally did kick with without an argument um because your channel just joining and leaving good riddance I hate that guy hours of fun honestly hours of entertainment uh and then if we do quit I think the server will did I not implement the Quick Command well if we control C does this just I guess this will just like disconnect after a bit of time and if I try hey it won't do anything yep there it is so that's gone now and if I try connecting it's won't be able to of course because the server is down there it is just stops after a while but if I restart the server I connect we should be able to get in and there you go Haze everywhere so thank you guys for watching this video I hope you enjoyed it all of this source code is going to be on GitHub just for free for you guys to take a look at and learn from um I guess I should probably add some disclaimers and that is the fact that there's no security really to this uh so you know use at your own risk people can obviously manipulate these messages they can write custom clients I've written the server in a way that hopefully won't result in everything being destroyed uh if I'm wrong in saying that please let me know and from this kind of Mega video I have a few spin-offs that I kind of want to make uh maybe like a code review of all of this because I haven't really gone through the code in detail and also getting Walnut like with the UI so the non-handless Walnut the head Walnut to run on Linux because at the moment that doesn't so this client only works on Windows the server of course in headless mode does run on Linux that's what we're doing here but not the GUI client so that might be an interesting video just kind of bringing Walnut onto Linux onto Ubuntu because I haven't done but let me know your thoughts in the comments below hopefully this was a good video and was helpful uh to you guys who want to play around with networking again game networking sockets just a really really good library to use I really like it would work valve uh and we've stolen a bunch of code from Hazel so maybe Hazel will steal some code from Walnut and actually end up integrating something like this client server API or whatever into Hazel so that we can make multiplayer games in the future speaking of which also might be nice to use this to actually make a multiplayer game so maybe that lies in the future as well anyway thank you guys for watching don't forget to check out hostinger.com Cherno to get your server and I will see you guys next time goodbye
Info
Channel: The Cherno
Views: 83,022
Rating: undefined out of 5
Keywords: networking in c++, c++ tutorial, cherno, hazel, walnut, programming, programming tutorial, networking, multiplayer, chat, cherno chat, walnut chat, linux, server, client, client server, gamenetworkingsockets, game networking sockets, gamedev, valve
Id: jS9rBienEFQ
Channel Id: undefined
Length: 32min 50sec (1970 seconds)
Published: Mon Jul 17 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.