public async Task Run(Func <byte[], int, byte[]> dataManager) { await IPAddress .Parse(WorkflowSocketListenerConfig.IPAddress) .ListenToAddress(WorkflowSocketListenerConfig.PortNumber, async(listener) => { using (var socket = await listener.AcceptSocketAsync()) { var args = new SocketAsyncEventArgs(); args.SetBuffer(new byte[0x1000], 0, 0x1000); var awaitable = new ReceiveSocketAwaitable(args); int bytesRead; while ((bytesRead = await socket.ReceiveAsync(awaitable)) > 0) { var args2 = new SocketAsyncEventArgs(); args2.SetBuffer(args.Buffer, 0, bytesRead); var awaiter = new SocketAwaitable(args2); await socket.SendAsync(awaiter); } socket.Close(); } }).ConfigureAwait(false); }
private async Task Sendata() { try { using (var socketClient = new Socket(SocketType.Stream, ProtocolType.Tcp)) { var ea = new SocketAsyncEventArgs { RemoteEndPoint = new DnsEndPoint(WorkflowSendSocketActionConfig.IPAddress, _port) }; //socketClient.Connect(IPAddress.Parse(WorkflowSendSocketActionConfig.IPAddress), _port); //IPAddress.Parse(WorkflowSendSocketActionConfig.IPAddress), _port var connectAwaiter = new SocketAwaitable(ea); await socketClient.ConnectAsync(connectAwaiter); Debug.WriteLine("Connected"); var send = new SocketAsyncEventArgs(); var dat = Encoding.ASCII.GetBytes("Hello World Again"); send.SetBuffer(dat, 0, dat.Length); var awaitable = new SocketAwaitable(send); await socketClient.SendAsync(awaitable); Debug.WriteLine("Sent Completed"); int recCount = 0; var recBuffer = new byte[2048]; var receive = new SocketAsyncEventArgs(); receive.SetBuffer(recBuffer, 0, recBuffer.Length); var receiveAwaiter = new ReceiveSocketAwaitable(receive); while ((recCount = await socketClient.ReceiveAsync(receiveAwaiter)) > 0) { Debug.WriteLine($"Received {recCount}"); Debug.WriteLine( $"Read through the buffer: {Encoding.ASCII.GetString(recBuffer, 0, recCount)}"); recBuffer = new byte[2048]; } //while (!socketClient.Connected){} /*var cancel = new CancellationToken(); * using (var networkStream = new NetworkStream(socketClient)) * { * networkStream.ReadTimeout = 1000; * networkStream.WriteTimeout = 1000; * var dat = Encoding.ASCII.GetBytes("Hello World Again"); * await networkStream.WriteAsync(dat, 0, dat.Length, cancel); * Debug.WriteLine("Writing"); * int recCount = 0; * var recBuffer = new byte[2048]; * while ((recCount = await networkStream.ReadAsync(recBuffer, 0, 2048, cancel)) > 0) * { * Debug.WriteLine($"Received {recCount}"); * Debug.WriteLine( * $"Read through the buffer: {Encoding.ASCII.GetString(recBuffer, 0, recCount)}"); * recBuffer = new byte[2048]; * } * * }*/ //socketClient.Shutdown(SocketShutdown.Send); //socketClient.Shutdown(SocketShutdown.Both); } } catch (Exception e) { Debug.WriteLine(e.Message); //await Task.FromException(e); } }