private void Slaving() { TcpServerSocket ClientServiceSocket = null; try { ClientServiceSocket = new TcpServerSocket(this.EnvHostBase.LocalIpAddress, this._listenSlavePort); do { // ClientServiceSocket.AcceptListen(); //if (ClientServiceSocket.Pending()) //{ //} Thread.Sleep(200); } while (!requestStop); } catch (Exception ex) { string ExceptionMsg = ex.Message + ex.StackTrace; // write to log file .. EnvLog.Writer(AssemblyInfoClass.ProductInfo, Log.Level.Error, ExceptionMsg, true); } finally { if (ClientServiceSocket != null) { // clean server socket resource .. ClientServiceSocket.Close(); } } }
public void TcpTest() { object monitor = new object(); lock (monitor) { bool clientMaySend = false; int payloadCounter = 0; Console.WriteLine("Starting server"); HashSet <Socket> connectedSockets = new HashSet <Socket>(); TcpServerSocket server = null; server = new TcpServerSocket(socket => { lock (monitor) { lock (connectedSockets) { Console.WriteLine("Server received client's connection"); connectedSockets.Add(socket); } } }, (sender, buffer, size) => { lock (monitor) { Console.WriteLine("SRec " + size); server.Send(sender, buffer, 0, size); } }, socket => { lock (connectedSockets) { Console.WriteLine("Server lost connection to client"); connectedSockets.Remove(socket); } }, connectedSockets, 1, Port); byte[] sendBuffer = new byte[DataSize]; _random.NextBytes(sendBuffer); Console.WriteLine("Starting client"); TcpClientSocket client = null; client = new TcpClientSocket(() => { lock (monitor) { Console.WriteLine("Client connected to server"); if (clientMaySend) { Console.WriteLine("Client not waiting for main thread"); } else { Console.WriteLine("Client waiting for main thread"); Monitor.Wait(monitor); } Console.WriteLine("Client sending first data"); client.Send(sendBuffer, 0, sendBuffer.Length); } }, error => { lock (monitor) { Console.WriteLine("Client failed to connect to server: " + error); } }, (buffer, size) => { lock (monitor) { Console.WriteLine("CRec " + size); AssertArrayContentsEqualInFirstArrayLengthRange(sendBuffer, buffer); if (++payloadCounter == PayloadCount) { Monitor.Pulse(monitor); } else { _random.NextBytes(sendBuffer); client.Send(sendBuffer, 0, sendBuffer.Length); } } }, () => Console.WriteLine("Client lost connection to server")); client.Start(Ip, Port); clientMaySend = true; Monitor.Pulse(monitor); Console.WriteLine("Main thread waiting"); Monitor.Wait(monitor); Console.WriteLine("Closing client"); client.Close(); Console.WriteLine("Closing server"); server.Close(); } }