gpt4 book ai didi

c# - StreamSocket、DataWriter.StoreAsync()、DataReader.LoadAsync()——异步问题

转载 作者:行者123 更新时间:2023-11-30 20:51:50 29 4
gpt4 key购买 nike

我正在创建一个 Win 8 商店应用程序,我在其中使用 StreamSocket 连接到一个用 Java 编写的服务器。当我在调试中运行应用程序时,在 StreamSocket.ConnectAsync(...)、DataWriter.StoreAsync() 和 DataReader.LoadAsync(...) 上设置断点,它会连接、发送消息并接收回消息。但是,一旦我删除了我的任何一个断点,该方法就无法完成它的工作。我该如何解决这个问题?这是我的代码:

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();
}
}

最佳答案

LoadAsync 默认情况下不会阻塞,直到读取了所有请求的字节。您可能收到了部分消息。

您需要实现任何类型的 message framing你的协议(protocol)使用,正如我在我的博客上描述的那样。

附言避免 async void。它确实使您的错误处理变得复杂。

关于c# - StreamSocket、DataWriter.StoreAsync()、DataReader.LoadAsync()——异步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21359004/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com