private void ListeningServerLaunchClientThreads() { TcpListener listener = new TcpListener(IPAddress.Any, _port); bool done_listening = false; while (!done_listening) { SetText("Server : Launched listening at port = " + _port + "..\r\n"); listener.Start(); Socket socket = listener.AcceptSocket(); socket.ReceiveTimeout = 60000000; SetText("Server : Client connection accepted..\r\n"); displayControl dc = (displayControl)_manageDispCtrl.getAvailableDisplayNotInUse(); if (dc == null) { SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : All screens occupied cannot add more connections. **ERROR** ..\r\n"); continue; } Thread thNewClient = new Thread(networkByteStreamToMatFrame); thNewClient.Start(socket); } }
public void InitializeDispCtrls(object pan, object cib) { displayControl dc = new displayControl(); dc._ctrl = (Panel)pan; dc._cibox = (ImageBox)cib; dc.inUse = false; //// ((System.ComponentModel.ISupportInitialize)(dc._cibox)).BeginInit(); dc._ctrl.Controls.Add((ImageBox)cib); dc._cibox.Dock = System.Windows.Forms.DockStyle.Fill; dc._cibox.Location = new System.Drawing.Point(0, 0); dc._cibox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); dc._cibox.Name = "captureImageBox" + (++nCounter); dc._cibox.Size = new System.Drawing.Size(298, 202); dc._cibox.TabIndex = 1; dc._cibox.TabStop = false; ((System.ComponentModel.ISupportInitialize)(dc._cibox)).EndInit(); dc.id = _displayCtrl.Count + 1; _displayCtrl.Add(dc); }
private void networkByteStreamToMatFrame(object sock) { Socket socket = (Socket)sock; byte[] extaLeftOver = { }; bool done = false; int lastfilesize = 0; SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : Streaming Started..\r\n"); displayControl dc = (displayControl)_manageDispCtrl.getAvailableDisplayNotInUse(); if (dc == null) { SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : All screens occupied cannot add more connections. **ERROR** ..\r\n"); return; } _cibox = (dc)._cibox; _manageDispCtrl.setDisplayIndexInUSe(_cibox); SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : delegated to screen [" + dc.id + "]..\r\n"); //ImageBox im3 = ((displayControl)_manageDispCtrl.getAvailableDisplayNotInUse())._cibox; //_manageDispCtrl.setDisplayIndexInUSe(im3); //ImageBox im4 = ((displayControl)_manageDispCtrl.getAvailableDisplayNotInUse())._cibox; //_manageDispCtrl.setDisplayIndexInUSe(im4); while (!done) { Dictionary <string, string> headers = new Dictionary <string, string>(); if (extaLeftOver.Length == 0) { try { socket.Receive(header); } catch (ObjectDisposedException ode) { done = true; } catch (SocketException se) { if (se.ErrorCode == 10054) { socket.Close(); } done = true; } } else { byte[] headerExtracted = SubArray(extaLeftOver, 0, 1024); // assuming constant hearder size 1024 byte[] streamBuffer = SubArray(extaLeftOver, 1024, extaLeftOver.Length - 1024); } //SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : Header received..\r\n"); string headerStr = Encoding.ASCII.GetString(header); string[] splitted = headerStr.Split(new string[] { "\r\n" }, StringSplitOptions.None); foreach (string s in splitted) { if (s.Contains(":")) { headers.Add(s.Substring(0, s.IndexOf(":")), s.Substring(s.IndexOf(":") + 1)); } } try { int filesize = Convert.ToInt32(headers["Content-length"]); //Get filesize from header if (filesize != lastfilesize) { SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : Updated file size = " + filesize + "..\r\n"); Array.Resize(ref buffer, filesize); } lastfilesize = filesize; byte[] temp = { }; int recvsize = 0; while (recvsize < filesize) { int size = socket.Receive(buffer, SocketFlags.None); if (size > filesize - recvsize) { int wastedBytes = (size - (filesize - recvsize)); //SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : Data Wasted = " + wastedBytes + "....\r\n"); size = filesize - recvsize; extaLeftOver = SubArray(buffer, size - 1, wastedBytes); } temp = temp.Concat(buffer.Take(size)).ToArray(); recvsize += size; } _cibox.Image = _camMemSerialDeserial.Deserialize <matFrameWrapper>(temp).MyProperty; string ackString = "DONE"; byte[] ackFrame = new byte[ackString.Length]; Array.Copy(Encoding.ASCII.GetBytes(ackString), ackFrame, Encoding.ASCII.GetBytes(ackString).Length); socket.Send(ackFrame); } catch (Exception e) { continue; } } SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : Streaming Stopped..\r\n"); _manageDispCtrl.ResetDisplayIndexInUSe(_cibox); }