Async TCP Server in .net 4.5 using asyn and await, data loss is happening

谁说胖子不能爱 提交于 2019-12-23 05:00:56

问题


I have to implement asyn tcp serve in .net 4.5 using async & await for this by referring the Link I have implemented the server

My server code is as below

public class AsyncEchoServer
{
    private int _listeningPort;
    public AsyncEchoServer( int port)
    {
        _listeningPort = port;
    }

    public async void Start()
    {

        IPAddress ipAddre = IPAddress.Parse("192.168.2.4");
        TcpListener listener = new TcpListener(ipAddre, _listeningPort);
        listener.Start();
        LogMessage("Server is running");
        while (true)
        {
            try
            {
                var tcpClient = await listener.AcceptTcpClientAsync();
                 HandleConnectionAsync(tcpClient);
            }
            catch (Exception exp)
            {
                LogMessage(exp.ToString());
            }

        }

    }

    private async void HandleConnectionAsync(TcpClient tcpClient)
    {
        string clientInfo = tcpClient.Client.RemoteEndPoint.ToString();
        try
        {
            using (var networkStream = tcpClient.GetStream())
            using (var reader = new StreamReader(networkStream))
            using (var writer = new StreamWriter(networkStream))
            {
                writer.AutoFlush = true;
                while (true)
                {
                    var dataFromServer = await reader.ReadLineAsync();
                    if (string.IsNullOrEmpty(dataFromServer))
                    {
                        break;
                    }
                    LogMessage(dataFromServer );
                await writer.WriteLineAsync("FromServer-" + dataFromServer);
                }
            }
        }
        catch (Exception exp)
        {
            LogMessage(exp.Message);
        }
        finally
        {
            tcpClient.Close();
        }

    }
    private void LogMessage(string message, [CallerMemberName]string callername = "")
    {
        System.Console.WriteLine("[{0}] - Thread-{1}- {2}",callername, Thread.CurrentThread.ManagedThreadId, message);
        //System.Console.WriteLine(message);

    }

I am using Jmeter TCP Sample for testing, in this i have created some 200 Thread group which send the data to server after every specific interval.

When I mention very small string like "1", "HI1" in all thread groups it works perfectly fine but the problem is when i mention some big strings let say of 800-900 characters, data loss is happening only partial data is display and many times from 200 clients only 24~25 clients data is displayed on console

Here is the snap of JMeter string

Can anyone please suggest what should be the problem.

Thanks in advance.

来源:https://stackoverflow.com/questions/32450432/async-tcp-server-in-net-4-5-using-asyn-and-await-data-loss-is-happening

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!