日期:2014-05-18  浏览次数:20447 次

问一个关于socket异步传输中回调函数是怎么一回事? 在线等,马上结贴
///   <summary>
///   将文件写到Socket
///   </summary>
                                  ///   <param   name= "s "> 要发送文件的Socket </param>
///   <param   name= "strFile "> 要发送的文件 </param>
///   <returns> 是否成功 </returns>
public   static   bool   WriteFileToSocket(Socket   s,string   strFile,OnSend   OnSendFile)
{
FileStream   fs   =   new   FileStream(strFile,FileMode.Open,FileAccess.Read,FileShare.Read)   ;

int   iLen   =   (int)fs.Length   ;

WriteDynamicLenToSocket(s,iLen)   ;
byte   []   buf   =   new   byte[iLen]   ;
try
{

fs.Read(buf,0,iLen)   ;
return   WriteBufToSocket(s,buf,0,iLen,DEALLEN,OnSendFile)   ;
}

catch(Exception   err)
{
MessageBox.Show( "发送文件失败! "+err.Message)   ;
                      return   false   ;
}

finally
{

fs.Close()   ;
}                            
}
这是一个别人写好的类
我直接调用
baseClass.CommunClass.WriteFileToSocket(socket,SendFileName,得到文本长度的回调函数)

这个不会写了

WriteFileToSocket是一个异步传送的方法,里面要用到回调函数,有谁以前也写的,请帮我看下,我在线的,马上结贴的


------解决方案--------------------
我也遇到过,是单独写一个类,用构造函数传参数的方法实现的。MSDN上写着呢
------解决方案--------------------
定义一个和OnSend委托签名一样的方法,并将其传递给OnSendFile参数!
------解决方案--------------------
回调函数要用到委托,委托相当于函数指针,能指向所用符合委托签名规则的方法。
如委托public delegate void dg1(int a);有一个方法public void method1(int a);
那么就可以用dg1(method1)在函数里调用他。
------解决方案--------------------
http://msdn2.microsoft.com/zh-cn/library/system.net.sockets.socket(VS.80).aspx
------解决方案--------------------
你是在WebForm上面用Socket吗?如果是的话,调用异步方法需要异步页面(Asycn Page)技术。

至于callback函数是什么,其实也就是一个委托。例如你想问现在微软的股价多少,一般的函数相当于你打电话过去,对方告诉你股价多少,而callback函数相当于对方告诉你需要花一点时间去查,因此你要留一个电话号码给他,也就是callback函数的委托,过一会儿他在打电话告诉你结果。