我开发一个FTP的搜索器,用FTP协议中的LIST命令能收到信息返回的信息,但是有的文件列表内容没有收到,这是为什么?我用了同步,异步都试了,还是不行,哪位遇到过我这样的问题,或者是有解决的办法,请跟帖,不胜感激。
源代码如下(异步)
if(nws.CanRead)
{
allDone.Reset();
nws.BeginRead(buffer,0,buffer.Length,new AsyncCallback (ReadCallBack),nws);
allDone.WaitOne();
}异步调用代码
private void ReadCallBack(IAsyncResult ar)
{
NetworkStream myNetworkStream = (NetworkStream)ar.AsyncState;
int readerLength=myNetworkStream.EndRead(ar);
message +=Encoding.Default.GetString(buffer, 0, readerLength);
}
源代码如下(异步)
if(nws.CanRead)
{
allDone.Reset();
nws.BeginRead(buffer,0,buffer.Length,new AsyncCallback (ReadCallBack),nws);
allDone.WaitOne();
}异步调用代码
private void ReadCallBack(IAsyncResult ar)
{
NetworkStream myNetworkStream = (NetworkStream)ar.AsyncState;
int readerLength=myNetworkStream.EndRead(ar);
message +=Encoding.Default.GetString(buffer, 0, readerLength);
}
解决方案 »
- C# dat文件的多行读写操作(非二进制文件)
- C# Winfom窗体中如何验证注册姓名是否在数据库中存在
- 函式 'Instance' 並未傳回有關所有程式碼路徑的值。使用該結果時,可能會在執行階段發生 null 參考例外狀況。
- vs2005安装问题
- C#中如何知道网页已下载完成啊?
- 图书下载
- WINFORM 自己写的全屏事件 有办法避免全屏的过程中窗体闪烁吗?
- 使用正则表达式能否将windows中hosts文件中的内容拆分成key、value的形式?
- 文件夹权限设置无效
- 为什么要写出shuchu(float a【】【4】),中的4
- 菜鸟求教:C#中如何调用IE打开*.htm文件!
- 请教关于异步通讯问题
一个传输控制,一个数据连接,传输控制在21端口,
数据连接又分二种模式,PORT主动和PASV被动连接
LIST 需要数据连接。
public string[] GetFileList(string path)
{
if(!logined)
{
Login();
}
NetworkStream nws=CreateNetworkStream();
SendCommand("LIST "+path);
retValue=GetRetValue();
if(!(retValue==150||retValue==125||retValue==226))
{
throw new IOException(message.Substring(4));
}
message="";
/*while(true)
{
int bytes=nws.Read(buffer,0,buffer.Length);
message+=Encoding.Default.GetString(buffer,0,bytes);
if(bytes<buffer.Length)
{
break;
}
}*/
if(nws.CanRead)
{
allDone.Reset();
nws.BeginRead(buffer,0,buffer.Length,new AsyncCallback(ReadCallBack),nws);
allDone.WaitOne();
}
else
{
Console.WriteLine("Sorry. You cannot read from this NetworkStream.");
}
char seperator='\n';
string[] dealStr=message.Split(seperator);
nws.Close();
//ReadMessage();
//GetRetValue();
//if(retValue != 226)
//{
// throw new IOException(message.Substring(4));
//}
return dealStr;
}
list的结果是从数据连接返回的。用port模式,需建立socket侦听,将用port命令将ip地址与侦听端口发送给服务器。
accept后就可以开始使用此socket进行数据接收了。