基于socket的即时通工具,采用c/s模式,文字信息是转化成byte[]然后socket到服务器,服务器再发给客户端,这方面我已经搞定了,类似QQ我想文件也这样搞,想将文件转化成byte[],再走老路子,我想问的第一个问题:文件转化成byte[]后再传,是不是太大,socket支持么?第二个问题是:我想将文件拖拽到聊天框然后点击“发送”,我的聊天框是2个richtextbox,怎么让他识别我拖拽过来的文件呢?

解决方案 »

  1.   

    补充:拖拽的时候,我只要这form读到这个文件的路径和名称就可以了
      

  2.   

    文件可以读一部分,发送一部分,没必要一次性读完,再发送.
    RicheTextBox rtb;
    rtb.EnableAutoDragDrop = true;
    处理DragDrop事件:string[] formats = e.Data.GetFormats();
    foreach (string fmt in formats)
    {
       if (fmt == "FileNameW"){//todo}
    }
      

  3.   

    Socket文件传输实例:http://download.csdn.net/source/2474322
      

  4.   

    拆成8K、16K之类的包。不需要RichTextBox内部去表达文件,只要用普通的拖放功能、在控件的事件中去解析拖放事件参数中的属性就行了。实际上,这跟RichTextBox没有关系,任何控件的编程都一样,比如你可以在用户名称Label控件上写完全一模一样的捕获拖放文件的功能代码。拖放功能可以简单地google就行,但是注意不必画蛇添足地去搜索RichTextBox,这个功能跟RichTextBox控件没有关系。
      

  5.   

    我只是想表达一下:让大侠们回答的时候,可以拿richtextbox来回答。。我不要原理,原理我懂,搞了这么久oop了,我只是想要具体代码
      

  6.   

    你的那些对我没用。白送了你2个积分。
    我的socket类自己已经有了,这个项目很庞大的,我只是将了其中一个小功能(传文件)而已,我不可能为了这个将我的类改成你的类
    只要帮我回答一下:
    1、socket协议限制文件大小么?限制的话,是多少呢?
    2、拖拽的时候,怎么操作呢?(用richtextbox为例说明,我用的是vs2005,只要将文件拖拽到rtb的时候,rtb显示文件的路径+文件名就好)
      

  7.   

    没人回答么?那我换个问题
       private void rich_Input_DragDrop(object sender, DragEventArgs e)
            {
                //用记事本打开并显示在屏幕中
                //Array arrayFileName = (Array)e.Data.GetData(DataFormats.FileDrop);            //string strFileName = arrayFileName.GetValue(0).ToString();            //StreamReader sr = new StreamReader(strFileName, System.Text.Encoding.Default);
                //rich_Input.Text = sr.ReadToEnd();
                //sr.Close();            //显示文件的路径名
                //Array aryFiles = ((System.Array)e.Data.GetData(DataFormats.FileDrop));
                //for (int i = 0; i < aryFiles.Length; i++)
                //{
                //    this.rich_Input.AppendText(aryFiles.GetValue(i).ToString() + Environment.NewLine);
                //}        }
    这是拖拽到richtextbox时触发的事件,我里面现在什么都没写。我现在想要实现:拖拽进去的文件转化成二进制,帮忙在这个事件中添加一点代码
      

  8.   

    。那再简单一点吧,怎么把文件(可能是mp4,text,exe),转化成byte[]
    然后怎么转回来?