NetworkStream в C # Сокет программирования - PullRequest
0 голосов
/ 18 октября 2018

Я разрабатываю приложение IOS в xamrain для связи с оборудованием, в котором приложение, отправляющее строковое сообщение на оборудование и оборудование, отвечает клиенту сообщения, читающему это сообщение, через сетевой поток.После прочтения сообщения от клиента сетевого потока очистите сетевой поток, но старое сообщение все еще остается в сетевом потоке.Пожалуйста, предложите мне решение, если кто-нибудь знает.

private async Task CommandSendAsync() 
{
    if (sock.Connected) 
    { 
        StreamWriter writer = new StreamWriter(sock.GetStream()); 
        writer.WriteLine("abc"); 
        writer.Flush(); 
        await DataReceivedAsync();
    } 
    else { sock.Connect(192.168.1.1, 8025); } 
} 


string String = "";
public byte[] ReadJunctionSetting = new byte[1071];
int a = 0;
protected Socket SimNetSocket;
public async Task DataReceivedAsync()
{
    try
    {
        await Task.Delay(2000);
        String = "";
        var abc = sock.GetStream();
        //byte[] bytes = new byte[sock.ReceiveBufferSize];
        while ((i = abc.Read(ReadJunctionSetting, 0, ReadJunctionSetting.Length)) != 0)
        {
            abc.Flush();
            for (int j = 0; j < 1071; j++)
            {
                string c = char.ConvertFromUtf32(ReadJunctionSetting[j]);
                String += c;
            }
            abc.Read(ReadJunctionSetting, 0, ReadJunctionSetting.Length);
            break;
        }
    }
    catch
    {               

    }
}

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Я вижу несколько проблем в вашем коде, например, @Damien_The_Unbeliever, на которые уже указывалось.Например, избегайте таких вещей:

string String = "";

Используйте более значимое имя переменной, например message.

Но я думаю, что ваша проблема в том, что вы получаете поток несколько раз.Затем вы получаете новый поток, который все еще содержит уже обработанные данные.

Попробуйте получить поток один раз после установления соединения и использовать этот экземпляр для отправки и получения.

0 голосов
/ 18 октября 2018

Из .NET документов

В методе Flush реализован метод Stream.Flush;однако, поскольку NetworkStream не буферизован, он не влияет на сетевые потоки.

Вы также можете опубликовать исходный код .NET для NetworkStream здесь .Flush - пустой метод.

...