Quantcast
Channel: Programming Forums
Viewing all articles
Browse latest Browse all 51036

Problem with multiple (array) socket receive

$
0
0
Hi!

I have to make a connection (client application) to 8 different socket. And then receive data from all socket. What I'd tried to do is make an array of socket and the connect them. This is working fine. Afterwards I trie to asynchronically receive data from all socket using methods bellow.
#region Global variables
        Socket[] m_socClient = new Socket[8];
        IAsyncResult[] m_asynResult = new IAsyncResult[8];
        AsyncCallback[] pfnCallBack = new AsyncCallback[8];
        byte[][] m_DataBuffer = new byte[8][];
        int timeOut = 500;
        string IPstring = "10.0.0.15";
        int[] PortNo = new int[8];
        string bar;
#endregion
#region Constructor
        public BAR()
        {
            IPAddress ip = IPAddress.Parse(IPstring); 
            for (int i = 0; i < 8; i++)
            {
                m_socClient[i] = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);                
                if (m_socClient[i].Connected == false)
                {
                    PortNo[i] = (2001 + (i * 10));
                    IPEndPoint ipEnd = new IPEndPoint(ip, PortNo[i]);
                    m_socClient[i].Connect(ipEnd);
                    //Čakaj dokler povezava ni vzpostavljena
                    while (m_socClient[i].Connected != true) ;
                }
            }
            WaitForData();
        }
#endregion

#region Ethernet received
        private void WaitForData()
        {                        
            for (int i = 0; i < 8; i++)
            {         
                if(pfnCallBack[i] == null)
                {
                    pfnCallBack[i] = new AsyncCallback(OnDataReceived);
                }                
                m_DataBuffer[i] = null;
                m_DataBuffer[i] = new byte[1024];
                m_asynResult[i] = m_socClient[i].BeginReceive(m_DataBuffer[i], 0, 1024, SocketFlags.None, pfnCallBack[i], null);
            }
        }

        private void OnDataReceived(IAsyncResult asyn)
        {
            //end receive...  
            for (int i = 0; i < 8; i++)
            {
                if (m_DataBuffer[i][0] != 0)
                {
                    m_socClient[i].EndReceive(asyn);
                    bar = ByteArrayToStr(m_DataBuffer[i]);
                }
            }            
            WaitForData();
        }
        #endregion


The method works fine if I receive data only on one socket (it doesn't meter witch), but after I receive some data on any other socket, method OnDataReceived won't fire. What am I doing wrong? Or what would be a right approach?

Viewing all articles
Browse latest Browse all 51036

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>