0

mfc でクライアント サーバー プログラムを作成したいのですが、この Web サイトから非常に優れたソース コードを見つけました: http://www.softwareandfinance.com/Visual_CPP/TCP_Client_Server.html

編集ボックスの代わりにリストボックスに情報を表示するのを手伝ってくれませんか?

クライアントを処理するコードは次のとおりです。

static void f(void *p)
{
    CSocketTestServerDlg *pDlg = reinterpret_cast<CSocketTestServerDlg*>(p);
    pDlg->ProcessClientRequest();
}

void CSocketTestServerDlg::ProcessClientRequest()
{
    SOCKADDR_IN clientaddr;
    struct hostent *hostentry;
    int len = sizeof(clientaddr);
    SOCKET clientsocket = accept(m_serversocket, (sockaddr*)&clientaddr, &len);

    if(len == -1)
    {
        AfxMessageBox("Error accpeting the client socket");
    }
    else
    {
        char *p = inet_ntoa(clientaddr.sin_addr);
        int portno = ntohs(clientaddr.sin_port);
        // int inet_pton(int af, const char *restrict src, void *restrict dst);

        char rbuf[1024];
        recv(clientsocket, rbuf, 1024, 0);
        for(int i = 1024; i >= 1; i--)
        {
            if(rbuf[i] == '\n' && rbuf[i - 1] == '\r')
            {
                rbuf[i-1] = '\0';
                break;
            }
        }


        CString strRecvData;

        strRecvData.Format("%s\r\n%s %d\r\n%s\r\n\r\n", (const char*)CTime::GetCurrentTime().Format("%B %d, %Y %H:%M:%S"), p, portno, rbuf);
        m_recvData += strRecvData;
        m_bRefershData = true;
        strcat(rbuf, "\r\n");
        send(clientsocket, rbuf, 1024, 0);
        closesocket(clientsocket);
    }
}

では、クライアントから IP アドレスを取得してリスト ボックスに表示するにはどうすればよいでしょうか。他のすべての情報は必要ありません

4

1 に答える 1

0

ええと、あなたはすでに IP を文字列として に持ってpいますね。

UNICODE の問題を回避するために、そこから CString を作成できます。次に、CListBox::AddString を使用して文字列を出力します。

char *p = inet_ntoa(clientaddr.sin_addr);

CString str(p);

//CListBox listbox;

listbox.AddString(str);
于 2013-03-15T11:32:55.837 に答える