0

Hi I am from a Visual Basic background, and if you're still reading this after that admission I could use your help..

I'm trying to learn VC++ and MFC and I'm just trying to work this out. In VB, you could have either a Winsock ActiveX control or use the API- either way, it's methods were public and useable by any procedure. Similarly there was an event for receiving data which fired when anything arrived.

My learning aid app is a dialog based MFC app and I'd like to be able to connect to a server, send strings to it, and see what comesback. The dialog has an Edit control (Edit1) for the server hostname, another (Edit2) for the port number, and a Button (button1) for 'Connect'.

The Edit controls ar einitialised on application start to:

// TODO: Add extra initialization here

m_strEdit1 = "pop3.blueyonder.co.uk";
m_strEdit2 = "110";
UpdateData(FALSE);

Button1 (connect) button event handler does this:

void CTest5Dlg::OnButton1() 
{
    // TODO: Add your control notification handler code here
    int nPort;
    nPort= atoi(m_strEdit2);
    CSocket m_sConnectSocket;
    m_sConnectSocket.Create();
    m_sConnectSocket.Connect(m_strEdit1,nPort);
    CString m_message = "";
    int len ;
    DWORD sent;
    len =m_message.GetLength();
    sent = m_sConnectSocket.Send(m_message,len);

    char *pBuf = new char[1025];
    int iBuf = 1024;
    DWORD iRcvd;
    CString Recvd= "Test";

    iRcvd = m_sConnectSocket.Receive(pBuf,iBuf);
    pBuf[iRcvd] = NULL;

    Recvd = pBuf;
    m_List1.AddString(Recvd);
    UpdateData(FALSE);
}

<< moderator edit: added [code][/code] tags >>

When you click the button, the connection is made and lo and behold, you get '+Blueyonder pop3 server ready.' appearing in the list box control.

Now what I want to do is, bearing in mind the TCP connection is still up, is to send more strings from an Edit control and another button- but I can't figure out for the life of me:
a) how you globally create the socket instance so it is accessible by many procedures (well, button event handlers mainly) and
b) can I globally trap incoming data..

any thoughts/suggestions welcome.. (stick to VB?!)

There is, I see, in the CSocket class an 'OnReceive' handler- how on earth do I get data from this into controls on my main dialog- a different class altogether and obviously, if I just include code like

m_List1.AddString(Receivedata);

for example, I get an error sayong the control isn't declared. Well, this is true, but how do you share controls between classes in this case?

Thanks for reading this...
Regards, Alan.

2
Contributors
1
Reply
2
Views
11 Years
Discussion Span
Last Post by Drowzee
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.