0% found this document useful (0 votes)
185 views5 pages

Server Socket Code-Cpp

Uploaded by

Shruti Mehta
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
185 views5 pages

Server Socket Code-Cpp

Uploaded by

Shruti Mehta
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 5

Server Socket Code

// Module: EchoServer.cpp
// Author: Rajinder Yadav
// Date: Sept 5, 2007
//
#include "stdafx.h"
#include <iostream>
#include <process.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
// Initialize WinSock2.2 DLL
// low word = major, highword = minor
WSADATA wsaData = {0};
WORD wVer = MAKEWORD(2,2);
int nRet = WSAStartup( wVer, &wsaData );
if( nRet == SOCKET_ERROR ) {
// WSAGetLastError()
cout << "Failed to init Winsock library" << endl;
return -1;
}
cout << "Starting server" << endl;
// name a socket
WORD WSAEvent = 0;
WORD WSAErr = 0;
// open a socket
//
// for the server we do not want to specify a network address
// we should always use INADDR_ANY to allow the protocal stack
// to assign a local IP address
SOCKET hSock = {0};
hSock = socket( AF_INET, SOCK_STREAM, IPPROTO_IP );
if( hSock == INVALID_SOCKET ) {
cout << "Invalid socket, failed to create socket" << endl;
return -1;
}
Rajinder Yadav Copyright © 2007 www.devmentor.org
// name socket
sockaddr_in saListen = {0};
saListen.sin_family = PF_INET;
saListen.sin_port = htons( 10000 );
saListen.sin_addr.s_addr = htonl( INADDR_ANY );
// bind socket's name
nRet = bind( hSock, (sockaddr*)&saListen, sizeof(sockaddr) );
if( nRet == SOCKET_ERROR ) {
cout << "Failed to bind socket" << endl;
//shutdown( hSock );
closesocket( hSock );
return -1;
}
while( true )
{
cout << "Listening for connections" << endl;
// listen
nRet = listen( hSock, 5 ); // connection backlog queue set to 10
if( nRet == SOCKET_ERROR )
{
int nErr = WSAGetLastError();
if( nErr == WSAECONNREFUSED ) {
cout << "Failed to listen, connection refused" << endl;
}
else {
cout << "Call to listen failed" << endl;
}
closesocket( hSock );
return -1;
}
// connect
sockaddr_in saClient = {0};
int nSALen = sizeof( sockaddr );
SOCKET hClient = accept( hSock, (sockaddr*)&saClient, &nSALen );
if( hClient == INVALID_SOCKET ) {
cout << "Invalid client socket, connection failed" << endl;
closesocket( hSock );
return -1;
}
cout << "Connection estabilished" << endl;
Rajinder Yadav Copyright © 2007 www.devmentor.org
// process data
char wzRec[512] = {0};
int nLeft = 512;
int iPos = 0;
int nData = 0;
do
{
nData = recv( hClient, &wzRec[iPos], nLeft, 0 );
if( nData == SOCKET_ERROR ) {
cout << "Error receiving data" << endl;
memset( &wzRec, 0, sizeof( wzRec ) );
break;
}
nLeft -= nData;
iPos += nData;
} while( nLeft > 0 );
cout << "Data Recieved: " << wzRec << endl;
// echo data back to client
iPos = 0;
nLeft = 512;
do
{
nData = send( hClient, &wzRec[iPos], nLeft, 0 );
if( nData == SOCKET_ERROR ) {
cout << "Error sending data" << endl;
break;
}
nLeft -= nData;
iPos += nData;
} while( nLeft > 0 );
// close client connection
closesocket( hClient );
hClient = 0;
// perform a lowercase comparison
if( _stricmp( wzRec, "!shutdown" ) == 0 ) {
break;
}
// clear data buffer
memset( &wzRec, 0, sizeof( wzRec ) );
} // loop
cout << "Shutting down the server" << endl;
Rajinder Yadav Copyright © 2007 www.devmentor.org
// close server socket
nRet = closesocket( hSock );
hSock = 0;
if( nRet == SOCKET_ERROR ) {
cout << "Error failed to close socket" << endl;
}
// Release WinSock DLL
nRet = WSACleanup();
if( nRet == SOCKET_ERROR ) {
cout << "Error cleaning up Winsock Library" << endl;
return -1;
}
cout << "Server is offline" << endl;
return 0;
}

Client Socket Code


// Module: EchoClient.cpp
// Author: Rajinder Yadav
// Date: Sept 5, 2007
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
// Initialize WinSock2.2 DLL
// low word = major, highword = minor
WSADATA wsaData = {0};
WORD wVer = MAKEWORD(2,2);
int nRet = WSAStartup( wVer, &wsaData );
if( nRet == SOCKET_ERROR ) {
cout << "Failed to init Winsock library" << endl;
return -1;
}
cout << "Opening connection to server" << endl;
WORD WSAEvent = 0;
WORD WSAErr = 0;
SOCKET hServer = {0};
// open a socket
//
// for the server we do not want to specify a network address
// we should always use INADDR_ANY to allow the protocal stack
// to assign a local IP address
hServer = socket( AF_INET, SOCK_STREAM, IPPROTO_IP );
if( hServer == INVALID_SOCKET ) {
cout << "Invalid socket, failed to create socket" << endl;
return -1;
}
// name a socket
sockaddr_in saServer = {0};
saServer.sin_family = PF_INET;
saServer.sin_port = htons( 10000 );
saServer.sin_addr.s_addr = inet_addr( "127.0.0.1" );
Rajinder Yadav Copyright © 2007 www.devmentor.org
// connect
nRet = connect( hServer, (sockaddr*)&saServer, sizeof( sockaddr ) );
if( nRet == SOCKET_ERROR ) {
cout << "Connection to server failed" << endl;
closesocket( hServer );
return -1;
}
cout << "Connected to server" << endl;
cout << "Sending data to server" << endl;
// process data
char wzRec[1024] = "Hello from client!!!";
int nLeft = 512;
int iPos = 0;
int nData = 0;
if( argc == 2 ) {
// copy input string from command argument
strcpy_s( wzRec, 1024, argv[1] );
}
do
{
nData = send( hServer, &wzRec[iPos], nLeft, 0 );
if( nData == SOCKET_ERROR ) {
cout << "Error sending data" << endl;
break;
}
nLeft -= nData;
iPos += nData;
} while( nLeft > 0 );
// clear data buffer
memset( &wzRec, 0, sizeof( wzRec ) );
nLeft = 512;
iPos = 0;
do
{
nData = recv( hServer, &wzRec[iPos], nLeft, 0 );
if( nData == SOCKET_ERROR ) {
cout << "Error receiving data" << endl;
break;
}
nLeft -= nData;
iPos += nData;
} while( nLeft > 0 );
cout << "Data Echoed: " << wzRec << endl;
cout << "Closing connection" << endl;
Rajinder Yadav Copyright © 2007 www.devmentor.org
// shutdown socket
nRet = shutdown( hServer, SD_BOTH );
if( nRet == SOCKET_ERROR ) {
// WSAGetLastError()
cout << "Error trying to perform shutdown on socket" << endl;
return -1;
}
// close server socket
nRet = closesocket( hServer );
hServer = 0;
if( nRet == SOCKET_ERROR ) {
cout << "Error failed to close socket" << endl;
}
// Release WinSock DLL
nRet = WSACleanup();
if( nRet == SOCKET_ERROR ) {
cout << "Error cleaning up Winsock Library" << endl;
return -1;
}
cout << "Data sent successfully" << endl;
return 0;
}

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy