In this tutorial, network programming is explained using a simple client server example.
For connecting between the client and the server we use windows sockets.
What is a Socket?
A socket is a communication endpoint — an object through which a Windows
Sockets application sends or receives packets of data across a network. A socket
has a type and is associated with a running process, and it may have a name.
Currently, sockets generally exchange data only with other sockets in the same
"communication domain," which uses the Internet Protocol Suite.
Two socket types are available:
- Stream sockets
Stream sockets provide a data flow without record boundaries: a
stream of bytes. Streams are guaranteed to be delivered and to be correctly
sequenced and unduplicated.
- Datagram sockets
Datagram sockets support a record-oriented data flow that is not
guaranteed to be delivered and may not be sequenced as sent or unduplicated.
"Sequenced" means that packets are delivered in the order sent.
"Unduplicated" means that you will get a particular packet only once.
Both kinds of sockets are bidirectional; they are data flows that can be
communicated in both directions simultaneously (full-duplex).
The
MFC Classes for socket communication are CAsyncSocket and CSocket.
CAsyncSocket: A CAsyncSocket object represents a Windows Socket
— an endpoint of network communication. Class CAsyncSocket encapsulates
the
Windows Socket Functions
API, providing an object-oriented abstraction for programmers who want to use
Windows Sockets in conjunction with MFC.
CSocket : Class CSocket derives from CAsyncSocket and
inherits its encapsulation of the Windows Sockets API. A CSocket object
represents a higher level of abstraction of the Windows Sockets API than that of
a CAsyncSocket object. For more information please refer MSDN. The
sequence flow for creating a simple client and server using socket is as
follows.
Setting Up Communication Between a Server and a Client
Server |
Client |
// construct a socket
CSocket sockSrvr;
|
// construct a socket
CSocket sockClient;
|
// create the SOCKET
sockSrvr.Create(nPort);
|
// create the SOCKET
sockClient.Create( );
|
// start listening
sockSrvr.Listen( );
|
|
|
// seek a connection
sockClient.Connect(strAddr, nPort); 3,4
|
// construct a new, empty socket
CSocket sockRecv;
// accept connection
sockSrvr.Accept( sockRecv );
|
|
// construct file object
CSocketFile file(&sockRecv);
|
// construct file object
CSocketFile file(&sockClient);
|
// construct an archive
CArchive arIn(&file,
CArchive::load);
-or-
CArchive arOut(&file,
CArchive::store);
– or Both –
|
// construct an archive
CArchive arIn(&file,
CArchive::load);
-or-
CArchive arOut(&file,
CArchive::store);
– or Both –
|
// use the archive to pass data:
arIn >> dwValue;
-or-
arOut << dwValue;
|
// use the archive to pass data:
arIn >> dwValue;
-or-
arOut << dwValue;
|
Click on the appropriate link below to see the Video and the
source.
Network Programming using VC++ and Windows Sockets