我正在尝试通过 StreamSockets 与我的 FTP 服务器连接,但由于某种原因,它不断崩溃并在阅读时给我这个错误:
WinRT 信息:已建立的连接被主机中的软件中止。
我正在使用两个流套接字,一个用于连接端口 21,另一个用于被动模式。并且被动模式读取方法总是崩溃。
这就是我检索数据的方式:
async public Task RetreiveData()
{
try
{
if (rdr == null)
{
rdr = new DataReader(dataSocket.InputStream);
rdr.InputStreamOptions = InputStreamOptions.Partial;
}
await rdr.LoadAsync(1024);
if (rdr.UnconsumedBufferLength > 0)
{
Debug.WriteLine("Data response");
response += rdr.ReadString(rdr.UnconsumedBufferLength);
Notify = true;
}
else
{
Done = true;
OnReceivedMessageChanged(response);
}
}
catch (Exception ex)
{
throw;
}
}
并像这样在后台工作人员中循环它
async void dataworker_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
await RetreiveData();
}
}
这就是我创建套接字的方式
StreamSocket dataSocket = new StreamSocket();
StreamSocketControl controller = dataSocket.Control;
controller.KeepAlive = true;
await dataSocket.ConnectAsync(new HostName(_server), port.ToString());
有趣的是,在我的被动流套接字崩溃后,我的端口 21 流套接字从服务器返回 226 状态码。
我正在为这个而头晕目眩。