StreamSocket, DataWriter.StoreAsync (), DataReader.LoadAsync () - Asynchronous problems

I am creating a Win 8 storage application in which I connect to a server written in Java using StreamSocket. When I run the application in debugging, with breakpoints in StreamSocket.ConnectAsync (...), DataWriter.StoreAsync () and DataReader.LoadAsync (...), it connects, sends the message and receives the message back. However, as soon as I delete any of my breakpoints, this method does not do the job. How can I fix this problem? Here is my code:

public async void Connect()
{
    try
    {
        await socket.ConnectAsync(new Windows.Networking.HostName(ip),
            "50000", SocketProtectionLevel.PlainSocket);
        Connected = true;
    }
    catch (Exception e)
    {
        if (SocketError.GetStatus(e.HResult) == SocketErrorStatus.Unknown)
        {
            throw;
        }

        Windows.UI.Popups.MessageDialog md =
            new Windows.UI.Popups.MessageDialog("Error: " + e.Message);
        return;
    }
    return;

}

public async void HandShake()
{
    try
    {

        //output
        writer = new DataWriter(socket.OutputStream);
        writer.UnicodeEncoding = 
             Windows.Storage.Streams.UnicodeEncoding.Utf8;

        byte[] nameBytes = Encoding.UTF8.GetBytes(Name.ToCharArray());
        writer.WriteBytes(nameBytes);
        await writer.StoreAsync();

        await writer.FlushAsync();
        writer.DetachStream();
        writer.Dispose();


        //input
        reader = new DataReader(socket.InputStream);
        reader.InputStreamOptions = InputStreamOptions.Partial;
        reader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;

        uint bytesAvailable = await reader.LoadAsync(4096);
        byte[] byArray = new byte[bytesAvailable];
        reader.ReadBytes(byArray);
        string temp = Encoding.UTF8.GetString(byArray, 0,
            Convert.ToInt32(bytesAvailable));

        temp = temp.Substring(0, temp.Length - 1);

        if (temp == "NAME OK")
        {
            GoodName = true;
        }

        reader.DetachStream();
        reader.Dispose();
    }
    catch (Exception e)
    {
        //await Task.WhenAll(tasks.ToArray());
        if (SocketError.GetStatus(e.HResult) == SocketErrorStatus.Unknown)
        {
            throw;
        }

        Windows.UI.Popups.MessageDialog md =
            new Windows.UI.Popups.MessageDialog("Error: " + e.Message);
        md.ShowAsync();
    }
}
+1
source share
2 answers

Connect() Task. , await Connect(); . , .

+1

LoadAsync , . , .

, , .

P.S. async void. .

+3

Source: https://habr.com/ru/post/1629267/


All Articles