C# SOCKET编程 求教

ArcRain 2007-05-18 02:45:30
自己尝试进行FTP的SOCKET编程,遇到些问题,特此求教各位高手赐教!谢谢!
1)我用同步,异步混编模式(即命令的发送与响应消息接收用同步模式,SEND,RECEIVE,数据接收用异步beginreceive,endreceive),发起连接FTP时创建一个线程A(避免用户界面无响应),并处理登陆,列表显示文件目录,这个过程OK,没问题。当按下窗体按钮切换路径时,常常会出现接收不到响应消息,但是连接国外FTP确又能收到,何解?难道是本机延迟太小,来不及响应?
private void sendCommand(String command) //发送命令
{
Byte[] cmdBytes = System.Text.Encoding.Default.GetBytes((command + "\r\n").ToCharArray());
clientSocket.Send(cmdBytes, cmdBytes.Length, 0);
this.readResponse();
}

private void readResponse() //接收响应消息
{
this.rmsg = "";
response = this.readLine();
}
private string readLine()
{
while (true)
{
this.bytes = clientSocket.Receive(this.buffer, this.buffer.Length, 0);
this.rmsg += System.Text.Encoding.Default.GetString(this.buffer, 0, this.bytes);

if (this.bytes < this.buffer.Length)
{
break;
}
}
}
2)在用ListView控件进行文件列表显示时,刚登陆时可以正常显示,但是切换改变路径后,异步接收的回调函数却说socket已被disposed,难道函数只能调用一次?

Receive(cSocket); //异步接收返回的文件列表
allDone.WaitOne();

IAsyncResult result = ListViewFtpServ.BeginInvoke(new System.EventHandler(ShowList), rmsg); //在ListView控件里显示文件列表
ListViewFtpServ.EndInvoke(result);

private void ReceiveCallback(IAsyncResult ar) //异步接收的回调
{
try
{
StateObject state = (StateObject)ar.AsyncState;
Socket client = state.workSocket;

int bytesRead = client.EndReceive(ar); //第二次使用异步接收时说client被disposed

if (bytesRead > 0)
{
state.sb.Append(Encoding.Default.GetString(state.buffer, 0, bytesRead));

client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReceiveCallback), state);
}
else
{
if (state.sb.Length > 1)
{
this.rmsg = state.sb.ToString();
}
allDone.Set();
}
}
catch (Exception e)
{
ShowMsg(e.ToString(), false);
}
}

3)能不能对同一个线程(thread)指定不同的方法,比如一开始按下连接按钮,执行
thread = new Thread(new ThreadStart(Login));
thread.Start();
连接上看到文件目录列表后,选中后按下切换目录按钮后,执行
thread = new Thread(new ThreadStart(ChangeDirectory));
thread.Start();

还望路过的达人不吝赐教,谢谢!
...全文
414 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolpc 2007-05-19
  • 打赏
  • 举报
回复
我来帮顶下……
ArcRain 2007-05-19
  • 打赏
  • 举报
回复
额,伤心的再顶下...
ArcRain 2007-05-18
  • 打赏
  • 举报
回复
额,回来继续顶~~
wuyisky84 2007-05-18
  • 打赏
  • 举报
回复
讨论交流it人的职业生涯,该如何合理的规划,少走一点弯路
qq群: 12386345
ArcRain 2007-05-18
  • 打赏
  • 举报
回复
额,先谢过楼上2位朋友的回帖。
继续,高人指教哈!
wzd24 2007-05-18
  • 打赏
  • 举报
回复
个人怀疑Socket被Close了。
小y的CSDN博客 2007-05-18
  • 打赏
  • 举报
回复
都看晕了
小y的CSDN博客 2007-05-18
  • 打赏
  • 举报
回复
你这个问题确实有点难度
帮顶
ArcRain 2007-05-18
  • 打赏
  • 举报
回复
不能沉啊...

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧