質問

My task is create a client-web communicate to server-mfc-app. That mean I am not allow to change server-mfc-app code, but must make web can talk to that server-mfc-app. That server-mfc-app uses socket and can communicate to client-mfc-app.

I created a client-web can connect to server-mfc-app successful (server-mfc-app accepts connection), but there is a problem when client-web sends message to server-mfc-app: server-MFC-app knows client-web sends message, but it can get message by function void CChatServerDlg::ReceiveData(SOCKET hSocket) (I run debug mode server-mfc-app to watch all functions).

Server-MFC-app code:

    ON_MESSAGE(MSG_ASYNC, OnAsyncSelect)
    LRESULT CChatServerDlg::OnAsyncSelect(WPARAM wParam, LPARAM lParam)
    {
        if (WSAGETSELECTERROR(lParam) != 0)
        {
        }
        else
        {
            switch(WSAGETSELECTEVENT(lParam))
            {
                case FD_READ:
                    ReceiveData(wParam);
                    break;
                case FD_ACCEPT:
                    {
                        CUserSocket *pClient = AcceptConnection();
                        if(pClient)
                        {
                            CString sReport;
                            sReport.Format(_T("Có kết nối từ IP: %s , Port: %d"),
                            pClient->GetRemoteIpAddr(),pClient->GetRemotePort());
                            m_lbStatus.AddString(sReport);
                            SendData(pClient->GetSocket(),_T("Server sẵn sàng"));
                            m_groupNewUsers.AddUser(pClient);
                        }
                    }
                    break;
                case FD_CLOSE:
                    CUserGroup *gr = m_groupList.FindGroup(wParam);
                    if (gr!=NULL)
                        gr->RemoveUser(wParam);
                    closesocket(wParam);
                    OnLbnSelchangeGrouplist();
                    m_lbStatus.AddString(_T("Đã đóng kết nối"));
                    break;
            }
        }
        return 0L;
    }
    void CChatServerDlg::ReceiveData(SOCKET hSocket)
    {
        char szBuf[MAX_LEN];
        int nByteRe = recv(hSocket, szBuf, MAX_LEN, 0);//always successful 
        // with client-mfc-app, and always unsuccessful with client-web below.
        if (nByteRe<=0) 
            return;
        wchar_t wch[MAX_LEN];
        CString s = _T("");
        MultiByteToWideChar(CP_UTF8,0,szBuf,nByteRe,wch,nByteRe/2);
        wch[nByteRe/2] = '\0';
        s += wch;
        SolveRequest(hSocket,s);
    }

Client-web code:

<?php
        error_reporting(E_ALL);
        $port = 2012;
        $address = "127.0.0.1";
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        if ($socket === false) {
            echo "socket_create() failed: reason: "
            .socket_strerror(socket_last_error())."<br/>";
        }
        $result = socket_connect($socket, $address, $port);
        if ($result === false) {
                echo "socket_connect() failed.\nReason: ($result) "
            .socket_strerror(socket_last_error($socket)) ."<br/>";
        }else{
            echo "Connecting successful."."<br/>";
        }
        $msg = "ULIST";
            $len = strlen($msg);
        $flag=0;
        socket_sendto($socket, $msg, $len, $flag, $address, $port);
        //socket_close($socket);
?>
役に立ちましたか?

解決

Please try to use socket_write($socket, $msg, $len ); instead of socket_sendto for connected socket

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top