• 首页
  • 小学语文
  • 中学语文
  • 中学英语
  • 免费论文
  • 教学随笔
  • 学生作文
  • 综合考试
  • 试题教案
  • 育儿话题
  • 教学资源
  • 编程技术
  • 博客
  • 使用C#进行点对点通讯和文件传输(发送接收部分)

    日期:2003-03-27  地址:  作者:

    上面介绍了通讯的基类,下面就是使用那个类进行发送和接收的部分:

    二、发送部分:

    发送咱们使用了多线程,可以同时进行多个任务,比如发送文件、发送文本等,互不影响:

    发送文本方法:

    private void StartSendText(string strHost,int iPort,string strInfo)

           {

               SendText stText = new SendText(strHost,iPort,strInfo,new CommunClass.OnSend(OnSendDrawProgress)) ;

               StartThread(new ThreadStart(stText.Send)) ;

           }

    下面是他调用用到的一些方法:

    开始一个线程

    private void StartThread(ThreadStart target)

           {

               Thread doStep = new Thread(target) ;          

               doStep.IsBackground = true ;

               doStep.Start() ;

           }

     发送一部分(本文设置的是1024字节)成功后的回调方法

            public void OnSendDrawProgress(int iTotal,int iSending)

           {  

               if (iTotal != pbMain.Maximum)

                   pbMain.Maximum = iTotal ;

                    pbMain.Value = iSending ;

           }

    因为使用的是线程,所以发送文本使用的是一个发送文本类的方法,该类如下:

    public class SendText

         {

              private string Host ;

              private int Port ;

              private string Info ;

              private CommunClass.OnSend onsend ;

             public SendText(string strHost,int iPort,string strInfo,

                  CommunClass.OnSend onSend)

             {

                  Host = strHost ;

                  Port = iPort ;

                  Info = strInfo ;

                  onsend = onSend ;

             }

             public void Send()

             {

                  Socket s  = null ;

                  try

                  {

                       s = CommunClass.ConnectToServer(Host,Port) ;

     

                       CommunClass.WriteCommandToSocket(s,"SENDTEXT") ;

                       CommunClass.WriteCommandDescToSocket(s,"") ;                  

                       CommunClass.WriteDynamicTextToSocket(s,Info,onsend) ;

                  }

                  catch (Exception e)

                  {

                       MessageBox.Show(e.Message) ;

                  }

                  finally

                  {

                       if (s != null)

                            s.Close() ;

                  }

             }

     

         }//end class

          

    这样就可以使用一个线程发送文本了。

    发送文件的方法也类似:

    private void StartSendFile(string strHost,int iPort,string strFile)

           {

               SendFile sfFile = new SendFile(strHost,iPort,strFile,this.pbMain) ;

               pbMain.Value = 0 ;

               StartThread(new ThreadStart(sfFile.Send)) ;       

           }

    发送文件的类:

    public class SendFile

         {

              private string Host ;

              private int Port ;

              private string FileToSend ;

              private ProgressBar pbar;

     

             public SendFile(string strHost,int iPort,string strFile,ProgressBar pbMain)

             {

                  Host = strHost ;

                  Port = iPort ;

                  FileToSend = strFile ;

                  pbar = pbMain ;

             }

             public void Send()

             {

                  Socket s  = null ;

                  try

                  {                  

                       s = CommunClass.ConnectToServer(Host,Port) ;

     

                       CommunClass.WriteCommandToSocket(s,"SENDFILE") ;

                       CommunClass.WriteCommandDescToSocket(s,"") ;

                      

                       CommunClass.WriteFileToSocket(s,FileToSend,new CommunClass.OnSend(OnSendDrawProgress)) ;

                  }

                  catch (Exception e)

                  {

                       MessageBox.Show(e.Message) ;

                  }

                  finally

                  {

                       if (s != null)

                            s.Close() ;

                  }

             }

            

     

             public void OnSendDrawProgress(int iTotal,int iSending)

             {   

                  if (iTotal != pbar.Maximum)

                       pbar.Maximum = iTotal ;

               

                  pbar.Value = iSending ;

             }        

        

         }//end class

    当然,你发送一个命令让服务器端启动一个程序(靠,这不成木马了吗?)也可以:

    俺这里只给出一部分代码,其余的您自己可以发挥以下:

    public class ExeCuteFile

         {

              private string Host ;

              private int Port ;

              private string FileName ;

              private string cmdParam ;

            

             public ExeCuteFile(string strHost,int iPort,string strFileName,string strCmdParam)

             {

                  Host = strHost ;

                  Port = iPort ;

                  FileName = strFileName ;

                  cmdParam = strCmdParam ;

             }

            

             public void Send()

             {

                       Socket s  = null ;

                  try

                  {

                       s = CommunClass.ConnectToServer(Host,Port) ;

     

                       CommunClass.WriteCommandToSocket(s,"EXECUTEFILE") ;

                       CommunClass.WriteCommandDescToSocket(s,FileName) ;

                       CommunClass.WriteDynamicTextToSocket(s,"",null) ;

                       MessageBox.Show(CommunClass.ReadDynamicTextFromSocket(s)) ;

                  }

                  catch (Exception e)

                  {

                       MessageBox.Show(e.Message) ;

                  }

                  finally

                  {

                       if (s != null)

                            s.Close() ;

                  }

     

             }

         }

    三、下面是服务器端接受信息的代码:

    创建监听:

    /// <summary>

             /// 再给定的主机和端口上创建监听程序

             /// </summary>

             /// <param name="strAddress"></param>

    对 使用C#进行点对点通讯和文件传输(发送接收部分) 文章的评论    [查看网友评论]

    验证码:
    匿名发表: