Re: Using same port number to connect more than one application to
 
See below:
nexolite wrote:
No reason I can imagine this would be possible.
It would be the role of your server to decide that an incoming message from X should be
sent to Y and an incoming message from Y should be sent to X.  You would write code to
manage this and do it.
Note that you have still not shown the code that is causing the problem.
*************
Even I know this is possible, and obviously I was not able to write code 
properly,
that's why I asked you, since you and others here are much experienced!
Also I cannot use code from other sources , Here I have to use my own code.
and I was not believing on my code thinking it is completely wrong.
OK , here is my code .
#include<afxwin.h>
#include<afxsock.h>
#include<vector>
#include "resource.h"
using namespace std;
class ConnectionManagerDialog : public CDialog
{
public:
    int i;
    CListBox from,to;
    ConnectionManagerDialog(int n):CDialog(n){i=0;}
    void OnAccept();
    void OnRecieve();
    BOOL OnInitDialog();
};
class ConSock : public CAsyncSocket
{
public:
    CDialog *pwnd;
    void SetParent(CDialog *mpwnd)
    {
        pwnd=mpwnd;	
    }
    void OnAccept(int nErrorCode)
     {
           if (nErrorCode == 0)
               ((ConnectionManagerDialog*)pwnd)->OnAccept();
          CAsyncSocket::OnAccept(nErrorCode);
    }
    void OnReceive(int nErrorCode)
    {
        if(nErrorCode==0)
        ((ConnectionManagerDialog*)pwnd)->OnRecieve();
At this point, the instance of ConSock defines which connection you're 
working with.  Do the Receive in ConSock::OnReceive() or pass some sort 
of indicator to ConnectionManagerDialog::OnReceive().
        
CAsyncSocket::OnReceive(nErrorCode);
    }
}serv,serv1;
vector<ConSock*> servs;   //To store the socks created with 'new'
BOOL ConnectionManagerDialog::OnInitDialog()
{
       	    AfxSocketInit();
        serv.SetParent(this);
        if(serv.Create(4945))
        {
            if(serv.Listen())
                MessageBox("listening");
            else MessageBox("listen failed");
        }
        else{
            MessageBox("create sock failed");
        }
        return CDialog::OnInitDialog();
}
void ConnectionManagerDialog::OnAccept()
{
    ConSock *servn = new ConSock;
    servs.push_back(servn);
    serv.Accept(*servn);
}
void ConnectionManagerDialog::OnRecieve()
{
    /*loop through all the servs[]->recive()
    Since I dont understand how I come to know for which this OnRecieve() was 
called I loop through all!
    and even this does not work properly , properly means according to me it 
should receive data from the socket for which OnRecieve was called 
    and send "hello" (only for testing) to it*/
Note that there's no reason not to an additional parameter to 
OnRecieve() indicating the connection.
                    
        /*This is the place where I m STUCK!!!*/
    char data[100];
    int read;
    for(int i=0;i<(int)servs.size();i++)
    {
        read=servs[i]->Receive(data,100*sizeof(char));
        if(read>0)
            servs[i]->Send("hello",sizeof("hello"));
    }
    CString str;
    str.Format("\nBytes Read=%d",read);
    OutputDebugString(str);
    TRACE(data);
    if(read==SOCKET_ERROR)
    {MessageBox("SOCKET_ERROR");
    }
    else{
    data[read]=NULL;
    OutputDebugString(data);
    }
}
class ConnectionManagerApp:public CWinApp
{
public:
    int InitApplication()
    {
        ConnectionManagerDialog d(IDD_DIALOG1);
        m_pMainWnd=&d;
        d.DoModal();
        return TRUE;
    }
}a;