public void ThreadMain() { int nThreadId = 0; string strThreadName = null; string strBuffer = null; int nResult = 0; int percentage = 0; string strDeviceID = null; int nCurVersion = 0; nThreadId = Thread.CurrentThread.ManagedThreadId; strThreadName = nThreadId.ToString(); //Create an instance of the class Socket = new SocketTools.SocketWrench(); Socket.Initialize(); Socket.Blocking = true; if (!Socket.Accept(Handle)) { Server.WriteLine("[ Thread: " + strThreadName + "] unable to accept connection, error " + Socket.LastError); return; } if (Server.RegisterClient(this, Thread.CurrentThread) == false) { Socket.Disconnect(); Server.WriteLine("[ Thread: " + strThreadName + "] unable to accept connection, too many active clients"); return; } Server.WriteLine("[ Thread: " + strThreadName + "] accepted connection from " + Socket.PeerAddress); FileStream fs = null; String filePath = ""; try { while (!Terminated) { if (Socket.IsReadable) { nResult = Socket.Read(ref strBuffer); if (strBuffer.Contains("ACK")) continue; if (nResult == 0) { Server.WriteLine("[ Thread: " + strThreadName + "] connection closed by client" + strBuffer); break; } else if (nResult == -1) { Server.WriteLine("[ Thread: " + strThreadName + "] socket read failed, error " + Socket.LastError); break; } //get the update file int nRead, doneSofar, Offset; long lSize; nRead = doneSofar = Offset = 0; filePath = @"D:\TMS\8224440103.AGN"; // Server.GetFilePath(strBuffer); fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); lSize = fs.Length; nResult = Socket.Write(lSize.ToString(), lSize.ToString().Length); Server.WriteLine("[ Thread: " + strThreadName + "] " + strBuffer + " : File size " + lSize.ToString() + " bytes"); if (nResult == -1) { Server.WriteLine("[ Thread: " + strThreadName + "] socket write failed, error " + Socket.LastError); break; } byte[] bytes = new byte[768]; while (fs.Position < lSize) { if (lSize < 768) nRead = fs.Read(bytes, Offset, (int) lSize); else nRead = fs.Read(bytes, Offset, 768); if (nRead == 0) break; nResult = Socket.Write(bytes, nRead); if (nResult == -1) { break; } doneSofar += nResult; percentage = (doneSofar*100)/(int) lSize; Server.SetTransferStatus(strThreadName + "," + Socket.PeerAddress + "," + percentage.ToString()); nResult = Socket.Read(ref strBuffer); if (!strBuffer.Equals("ACK")) { Server.SetTransferStatus(strThreadName + "," + Socket.PeerAddress + " (FAILED) ," + percentage.ToString()); } } } if (fs != null) fs.Close(); } } catch (Exception ex) { Server.WriteLine(strThreadName + " " + ex.Message + " File requested: " + filePath); } Socket.Disconnect(); }
private void frmServer_Load(object sender, EventArgs e) { try { int nIndex = 0; // Create an instance of the SocketWrench class which will // function as our listening (server) socket Socket = new SocketTools.SocketWrench(); if (!Socket.IsInitialized) { throw new System.Exception("Unable to initialize SocketWrench class"); } // Event handler for the OnAccept event Socket.OnAccept += new SocketTools.SocketWrench.OnAcceptEventHandler(Socket_OnAccept); LoadSettings(); if (StartServer()) WriteLine("tTMS || Server Started : Listening on Port " + strServerPort); else WriteLine("tTMS || Server failed to start"); } catch (Exception ex) { MessageBox.Show(ex.StackTrace, "Contact Admin", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }