You need to be able to read the socket without tying up your UI thread. Otherwise, the window appears unresponsive.
You have two choices for that. The first, and ostensibly easiest, is to use threads explicitly as already mentioned.
The second is to use one of the async versions of the accept/read/write functions (either BeginXXX/EndXXX or XXXAsync, depending on what API you use), which start up another thread from a thread pool for you. (The Async versions actually don't grab a thread til the event happens, while Begin/End might grab one immediately.) Unless you actually need to dedicate a new thread to watching a socket (and you almost never really do), i'd prefer the async stuff.
Either way, you're going to want to learn a little about multithreading. In this case, the big things you need to remember are that (1) no matter how you do it, your socket stuff is almost certainly going to be happening on another thread; and (2) WinForms controls hate being directly accessed from other threads; you'll need to use their Invoke method to make stuff happen on the UI thread instead.