将ReadLineAsync用于客户端 - 服务器通信是否完全可以

时间:2015-10-28 14:21:32

标签: c# tcp network-programming

我试图实现客户端 - 服务器通信,该通信应支持以换行符结尾的命令。做这样的事情是完全可以的:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        RunServer();
    }

    async private Task RunServer()
    {
        var listener = new TcpListener(IPAddress.Any, 1065);
        listener.Start();
        while (true)
        {
            TcpClient client = await listener.AcceptTcpClientAsync();
            HandleClient(client);
        }
    }

    async private Task HandleClient(TcpClient client)
    {
        using (var networkStream = client.GetStream())
        using (var reader = new StreamReader(networkStream))
        {
            var dataFromServer = await reader.ReadLineAsync(); // here
            MessageBox.Show("Received \"" + dataFromServer + "\"");
        }
    }
}

或者我应该使用AsyncRead并检查收到的缓冲区是否包含' \ n'而不是角色?

它是否会在任何情况下都有效,即使该消息将被分成几个IP数据包?

1 个答案:

答案 0 :(得分:0)

我认为在ReadAsync上使用ReadLineAsync更好:你正在读一行而不需要额外的if语句,也不需要额外的循环。