944,179 Members | Top Members by Rank

Ad:
  • C++ Discussion Thread
  • Unsolved
  • Views: 3459
  • C++ RSS
Oct 12th, 2004
0

Establishing A connection between Three programs.

Expand Post »
Hello Everyone,

I'm trying to exchange messages between three different programs, I was able to establish a connection between the Server and Client A programs, but when I added code to include client B program I got an infinite loop. I've enclosed segments of my code. I would really appreciate any help I can get.

Thanks in advance.


Server(Passive connection):
=====================
WSADATA WsaDat;
SOCKET Socket;
SOCKET TempSock = SOCKET_ERROR;
int portnum = 50;
char String[50];
int retval = SOCKET_ERROR;
SOCKADDR_IN SockAddr;
HOSTENT *hp;
char ServerName[255];





if (WSAStartup(MAKEWORD(1, 1), &WsaDat) != 0)
{
cout <<"\n WSA Initialization Failed";
cout.flush();
}

// Clear the Address
memset(&SockAddr, 0, sizeof(SOCKADDR_IN));

// Get Local Computer Name
gethostname(ServerName, sizeof(ServerName));

// Get Local Computer Address Information
hp = gethostbyname(ServerName);
if ( hp == NULL)
{
cout <<"\n Attempt to retreive computer infromation failed";
cout.flush();
return INVALID_SOCKET;
}

// This is the host address
SockAddr.sin_family = hp->h_addrtype;

// This is the port number
SockAddr.sin_port = htons(portnum);

// Create the Socket
Socket = socket(AF_INET, SOCK_STREAM, 0);
if (Socket == INVALID_SOCKET)
{
cout <<"\n Socket Creation Failed";
cout.flush();
return INVALID_SOCKET;
}


// Binding the Address
if (bind(Socket, (SOCKADDR *)(&SockAddr), sizeof(SockAddr)) == SOCKET_ERROR)
{
cout <<"\n Attempt to bind failed";
cout.flush();
return INVALID_SOCKET;
}

// Listen to Incoming Requests and Return a Valid Socket

listen(Socket, 40);

// Accepting Incoming Requests

while (TempSock == SOCKET_ERROR)
{
TempSock =accept(Socket, NULL, NULL);
}
Socket = TempSock;

// Message exchange with Client A comes here

closesocket(TempSock);
closesocket(Socket);
==========================================================
Client A (Active connection):
======================
// ------- Initializing WSA --------
InitializingWSA(WsaDat);


// ------- Store Information About the Server -----
hostEntry = gethostbyname("station-1");

if(!hostEntry)
{
cout <<"\nError getting the host name";
cout.flush();
WSACleanup();
}


// ------- Create the Socket --------

Socket = socket(AF_INET, SOCK_STREAM, 0);
if (Socket == INVALID_SOCKET)
{
cout <<"\n Socket Creation Failed";
cout.flush();
}


// ------- Binding the Socket --------
// I want an internet type connection (TCP/IP)
ServerInfo.sin_family = AF_INET;
ServerInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);
// I want to use port 50
ServerInfo.sin_port = htons(50);


// Connect to the server
if (connect(Socket, (SOCKADDR *)(&ServerInfo), sizeof(ServerInfo)) != 0)
{
cout <<"\n Failed to Establish Connection with the Server";
cout.flush();
}

// Message exchange with the SERVER takes place here

// Close the Connection on the Client side

closesocket(Socket);

// Attempt to connect to client B
// ------- Initializing WSA ------
InitializingWSA(WsaDat);


// ------- Store Information About the Server -----
hostEntry2 = gethostbyname("station-1");

if(!hostEntry2)
{
cout <<"\nError getting the host name";
cout.flush();
WSACleanup();
}


// ------- Create the Socket --------

Socket2 = socket(AF_INET, SOCK_STREAM, 0);
if (Socket2 == INVALID_SOCKET)
{
cout <<"\n Socket 2 Creation Failed";
cout.flush();
}


// ------- Binding the Socket --------
// I want an internet type connection (TCP/IP)
ClientBInfo.sin_family = AF_INET;
ClientBInfo.sin_addr = *((LPIN_ADDR)*hostEntry2->h_addr_list);
// I want to use port 60
ClientBInfo.sin_port = htons(60);
if (connect(Socket, (SOCKADDR *)(&ClientBInfo), sizeof(ClientBInfo)) != 0)
{
cout <<"\n Failed to Establish Connection with the Client B";
cout.flush();
}

retval= SOCKET_ERROR;
char String22[50] = "Hello";
cout <<"\n String is:"<< String22 << endl;
cout.flush();

while (retval == SOCKET_ERROR)
{
retval = send(Socket2, String22, strlen(String22) +1,0);
if ( retval == 0)
{
cout <<"\n Connection closed at other end\n";
cout.flush();
break;
}
}


closesocket(Socket2);
==========================================================
Client B(Passive Connection):
======================
if (WSAStartup(MAKEWORD(1, 1), &WsaDat) != 0)
{
cout <<"\n WSA Initialization Failed";
cout.flush();
}
// Clear the Address
memset(&SockAddr, 0, sizeof(SOCKADDR_IN));

// Get Local Computer Name
gethostname(ClientBname, sizeof(ClientBname));

// Get Local Computer Address Information
hp = gethostbyname(ClientBname);
if ( hp == NULL)
{
cout <<"\n Attempt to retreive computer infromation failed";
cout.flush();
return INVALID_SOCKET;
}

// This is the host address
SockAddr.sin_family = hp->h_addrtype;

// This is the port number
SockAddr.sin_port = htons(60);

// Create the Socket
Socket = socket(AF_INET, SOCK_STREAM, 0);
if (Socket== INVALID_SOCKET)
{
cout <<"\n Socket Creation Failed";
cout.flush();
return INVALID_SOCKET;
}


// Binding the Address
if (bind(Socket, (SOCKADDR *)(&SockAddr), sizeof(SockAddr)) == SOCKET_ERROR)
{
cout <<"\n Attempt to bind failed";
cout.flush();
return INVALID_SOCKET;
}

// Listen to Incoming Requests and Return a Valid Socket

listen(Socket 40);

// Accepting Incoming Requests

while (TempSock == SOCKET_ERROR)
{
TempSock =accept(Socket, NULL, NULL);
}
Socket = TempSock;


retval= SOCKET_ERROR;

while (retval == SOCKET_ERROR)
{
retval = recv(Socket, String, 50,0);
if (retval == 0)
{
cout <<"\n Connection closed at other end";
cout.flush();
break;
}

}

cout << "\n Contents of the message:" << String << endl;
cout.flush();
// Close the Connection on the Server side
closesocket(TempSock);
closesocket(Socket);
Similar Threads
Reputation Points: 11
Solved Threads: 0
Newbie Poster
Layla_2401 is offline Offline
22 posts
since Sep 2004

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C++ Forum Timeline: reading input ... quick C++ question ...
Next Thread in C++ Forum Timeline: how to do something special with this question





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC