void CMPIMonitorDlg::OnGetApplications() 
{

	while (m_ctlListApplications.GetCount())
		m_ctlListApplications.DeleteString(0);
	int iCommand = SERVICE_GET_MPI_APPLICATIONS;
	DWORD dwID = -1;
	int iLength;
	CString strTemp;

	SOCKET Sock;

	// create the socket
	Sock = socket(PF_INET, SOCK_STREAM, 0);
	if (Sock != INVALID_SOCKET)
	{
		SOCKADDR_IN sockAddr;
		memset(&sockAddr,0,sizeof(sockAddr));

		sockAddr.sin_family = AF_INET;
		sockAddr.sin_addr.s_addr = htonl(INADDR_ANY);
		sockAddr.sin_port = 0;

		if (bind(Sock, (SOCKADDR*)&sockAddr, sizeof(sockAddr)) == SOCKET_ERROR)
			ASSERT(0);
	}

	m_ctlMachineName.GetWindowText(strTemp);

	if (strTemp.IsEmpty() || strTemp == "")
	{
		strTemp.Empty();
		//get the local host name
		gethostname(strTemp.GetBuffer(256), 256);
		strTemp.ReleaseBuffer();
	}

	SOCKADDR_IN sockAddr;
	memset(&sockAddr,0,sizeof(sockAddr));

	sockAddr.sin_family = AF_INET;
	sockAddr.sin_addr.s_addr = inet_addr(strTemp);

	if (sockAddr.sin_addr.s_addr == INADDR_NONE)
	{
		LPHOSTENT lphost;
		lphost = gethostbyname(strTemp);
		if (lphost != NULL)
			sockAddr.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
		else
		{
			ASSERT(0);
			//WSASetLastError(WSAEINVAL);
			//return false;
		}
	}

	sockAddr.sin_port = htons((u_short)MPI_SERVICE_PORT);

	if (connect(Sock, (SOCKADDR*)&sockAddr, sizeof(sockAddr)) == SOCKET_ERROR)
	{
		AfxMessageBox("Connection not established");
		return;
	}

	//socket.Connect(strTemp, MPI_SERVICE_PORT);
	
	send(Sock, (char*)&iCommand, sizeof(int), 0);
	recv(Sock, (char*)&dwID, sizeof(DWORD), 0);
	if (dwID != -1)
		m_arrProcessIds.Add(dwID);

	if (dwID == -1)
		m_ctlListApplications.AddString("No MPI Applications are running");


	while (dwID != -1)
	{
		strTemp.Empty();
		recv(Sock, (char*)&iLength, sizeof(int), 0);
		//Socket.Receive(&iLength, sizeof(int));
		recv(Sock, strTemp.GetBuffer(iLength), iLength, 0);
		//Socket.Receive(strTemp.GetBuffer(iLength), iLength);

		strTemp.ReleaseBuffer();

		//CListBox
		m_ctlListApplications.AddString(strTemp);

		//Socket.Receive(&dwID, sizeof(DWORD));
		recv(Sock, (char*)&dwID, sizeof(DWORD), 0);
		//CArray
		if (dwID != -1)
			m_arrProcessIds.Add(dwID);
	}

	iCommand = SERVICE_TERMINATE_SESSION;
	if (send(Sock, (char*)&iCommand, sizeof(int), 0) == SOCKET_ERROR)
		MessageBox("Terminate failed", "");

	closesocket(Sock);
}