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);
}