问题描述
我创建一个双赢8商店应用中,我连接到服务器,用Java编写的,使用StreamSocket。当我运行StreamSocket.ConnectAsync(...),DataWriter.StoreAsync()在调试应用程序,具有断点,DataReader.LoadAsync(...),它连接,发送消息,并收到一个消息发回。但是,一旦我删除我的断点的任何一项,方法并不做的工作。我如何能解决这个问题?这里是我的code:
公共异步连接无效()
{
尝试
{
等待socket.ConnectAsync(新Windows.Networking.HostName(IP)
50000,SocketProtectionLevel.PlainSocket);
连接= TRUE;
}
赶上(例外五)
{
如果(SocketError.GetStatus(e.HResult)== SocketErrorStatus.Unknown)
{
扔;
} Windows.UI.Popups.MessageDialog MD =
新Windows.UI.Popups.MessageDialog(错误:+ e.Message);
返回;
}
返回;}公共异步无效握手()
{
尝试
{ //输出
作家=新DataWriter(socket.OutputStream);
writer.Uni codeEncoding =
Windows.Storage.Streams.Uni codeEncoding.Utf8; 字节[] = nameBytes Encoding.UTF8.GetBytes(Name.ToCharArray());
writer.WriteBytes(nameBytes);
等待writer.StoreAsync(); 等待writer.FlushAsync();
writer.DetachStream();
writer.Dispose();
//输入
读者=新的DataReader(socket.InputStream);
reader.InputStreamOptions = InputStreamOptions.Partial;
reader.Uni codeEncoding = Windows.Storage.Streams.Uni codeEncoding.Utf8; UINT信息bytesAvailable =等待reader.LoadAsync(4096);
字节[] = byArray新的字节[方bytesAvailable]
reader.ReadBytes(byArray);
字符串TEMP = Encoding.UTF8.GetString(byArray,0,
Convert.ToInt32(参考bytesAvailable)); TEMP = temp.Substring(0,temp.Length - 1); 如果(临时==NAME OK)
{
GoodName = TRUE;
} reader.DetachStream();
reader.Dispose();
}
赶上(例外五)
{
//等待Task.WhenAll(tasks.ToArray());
如果(SocketError.GetStatus(e.HResult)== SocketErrorStatus.Unknown)
{
扔;
} Windows.UI.Popups.MessageDialog MD =
新Windows.UI.Popups.MessageDialog(错误:+ e.Message);
md.ShowAsync();
}
}
我改变了connect()以任务的返回类型。然后把它称为正因为如此,等待连接();
我把收发code在不同的方法和做了同样的。我的问题是一个异步的问题,这个固定它。
I'm creating a Win 8 store app in which I connect to a server, written in Java, using StreamSocket. When I run the app in debug, with breakpoints on StreamSocket.ConnectAsync(...), DataWriter.StoreAsync(), and DataReader.LoadAsync(...), it connects, sends the message, and receives a message back. However, once I remove any one of my breakpoints, that method doesn't do it's job. How can I can fix this issue? 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();
}
}
I changed the return type of Connect() to Task. Then called it as such, await Connect();
I put send and receive code in separate methods and did the same. My issue was an asynchronous problem and this fixed it.
这篇关于StreamSocket,DataWriter.StoreAsync(),DataReader.LoadAsync() - 异步问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!