【问题标题】:Creating a await task to send message创建等待任务以发送消息
【发布时间】:2018-12-25 00:55:07
【问题描述】:

我做了一个客户端服务器异步。连接打开,客户端向服务器发送一个字符串。但是现在我想在用户单击按钮时向他发送一些东西确定

我尝试执行等待任务,从我的服务器向我的客户端发送消息,如下所示:

private async void buttonOk_ClickAsync(object sender, RoutedEventArgs e)
    {
    // Get all strokes on the InkCanvas.
    IReadOnlyList<InkStroke> currentStrokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes();
    Boolean flag = false;


    if (currentStrokes.Count > 0)
    {
        Windows.Storage.StorageFolder picturesLibrary = KnownFolders.PicturesLibrary;
        StorageFolder savedPicturesFolder = await picturesLibrary.CreateFolderAsync("New Pictures", CreationCollisionOption.OpenIfExists);
        StorageFile imageFile = await savedPicturesFolder.CreateFileAsync("NewImage.jpg", CreationCollisionOption.ReplaceExisting);

        CanvasDevice device = CanvasDevice.GetSharedDevice();
        CanvasRenderTarget renderTarget = new CanvasRenderTarget(device, (int)inkCanvas.ActualWidth, (int)inkCanvas.ActualHeight, 96);

        using (var ds = renderTarget.CreateDrawingSession())
        {
            ds.Clear(Colors.White);
            ds.DrawInk(inkCanvas.InkPresenter.StrokeContainer.GetStrokes());
        }

        using (var fileStream = await imageFile.OpenAsync(FileAccessMode.ReadWrite))
        {
            await renderTarget.SaveAsync(fileStream, CanvasBitmapFileFormat.Jpeg, 1f);
        }

        flag = true;
    }

    if (flag)
    {
        var res = await senddata();
        flag = false;
    }

    inkCanvas.InkPresenter.StrokeContainer.Clear();
    GrdLogo.Visibility = Visibility.Visible;
    GrdApp.Visibility = Visibility.Collapsed;

}

private async Task<string> senddata()
  {
  Stream streamOut = socket.OutputStream.AsStreamForWrite();
  StreamWriter writer = new StreamWriter(streamOut);
  string request = "Hello client";
  await writer.WriteLineAsync(request);
  await writer.FlushAsync();
  return null;
  }

但我的服务器不发送并挂起。有人可以解释一下为什么吗? 感谢您的帮助

【问题讨论】:

  • 是不是因为画布没有清空而“挂起”?
  • “挂起”是什么意思?它挂在哪里,哪一行代码?究竟是什么没有发生? senddata() 是什么?
  • 在这一行:var res = await senddata();服务器不发送请求=“Hello client”并自行关闭
  • 那么为什么要向我们展示除了不起作用的方法之外的所有内容?
  • 对不起,方法在最后

标签: c# uwp stream async-await task


【解决方案1】:

@Xavier Xie:这是我的服务器端代码

string response;
using(Stream inputStream = streamSocket.InputStream.AsStreamForRead())    
{
   using(StreamReader streamReader = new StreamReader(inputStream))
   {
      response = await streamReader.ReadLineAsync();
   }
}
this.txtBlk_Events.Text += response;

我变成了这样的消息:“一个现有的连接必须被远程主机关闭”

【讨论】:

  • 如果这是您的服务端代码,我没有看到任何将数据发送到您的客户端的代码。它只是从套接字输入流中读取数据。
【解决方案2】:

好的,我找到了解决方案。我犯的错误,我忘记将客户端置于监听模式。 之后,我的服务器也可以向我的客户端发送消息。 这篇文章帮助我:Network connection with UWP Apps

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2012-12-23
    • 2021-10-13
    • 2023-01-29
    相关资源
    最近更新 更多