Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Diagnostics;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApp1
- {
- static class Program
- {
- private static Task<int> SendTaskAsync(this Socket socket, byte[] buffer, int offset, int size)
- {
- return Task.Factory.FromAsync(
- socket.BeginSend(buffer, offset, size, SocketFlags.None, null, socket),
- socket.EndSend);
- }
- private static async Task SendAllTaskAsync(this Socket socket, byte[] buffer)
- {
- for (var i = 0; i != buffer.Length;)
- {
- i += await socket.SendTaskAsync(buffer, i, buffer.Length - i);
- }
- }
- private static Task<int> ReceiveTaskAsync(this Socket socket, byte[] buffer)
- {
- return Task.Factory.FromAsync(
- socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, null, socket),
- socket.EndReceive);
- }
- private static async Task ReceiveAllTaskAsync(this Socket socket, byte[] buffer)
- {
- for (var i = 0; i != buffer.Length;)
- {
- i += await Task.Factory.FromAsync(
- socket.BeginReceive(buffer, i, buffer.Length - i, SocketFlags.None, null, socket),
- socket.EndReceive);
- }
- }
- static async Task Main(string[] args)
- {
- var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 60032));
- client.SendTimeout = 100 * 1000;
- client.ReceiveTimeout = 100 * 1000;
- var sb = Encoding.UTF8.GetBytes("Hello, world!");
- var rb = new byte[sb.Length];
- var sw = new Stopwatch();
- sw.Start();
- for (var i = 0; i < 100000; i++)
- {
- await client.SendAllTaskAsync(sb);
- await client.ReceiveAllTaskAsync(rb);
- }
- client.Shutdown(SocketShutdown.Both);
- sw.Stop();
- Console.WriteLine(sw.Elapsed);
- }
- }
- }
Add Comment
Please, Sign In to add comment