Network programming refers to the writing of programs that execute across multiple devices (computers), in which all the devices are connected to each other with a network. A socket is one end-point of a two way communication link between two programs running on the network. A client program creates a socket on its end and attempts to connect that socket to a server. When the connection is made, the server creates a socket object on its end. The client and server can now communicate by writing to and reading from the socket.