In addition to the low-level stuff (TCP/IP), you have to think up a protocol that you use for client/server communication. Your clients need a way to say hello to the server, eventually authenticate, send player's actions, etc. and understand the servers responses. I really think the protocol is the hard part of network programming. Besides, you have to be aware of other specifics of a client/server architecture, such as important processing should be done on the server side in order to prevent cheating (which is a big plus for the client/server architecture), latency (big minus), and all the things I do not have in my forehead right now :-)
perl -e "use strict;*1=*CORE'die,*!=*=,@==-japh,s??'&1(@! ,$/)'?ee,&1($@)"