当前位置:编程学习 > C#/ASP.NET >>

socket,byte[],文件

基于socket的即时通工具,采用c/s模式,文字信息是转化成byte[]然后socket到服务器,服务器再发给客户端,这方面我已经搞定了,类似QQ

我想文件也这样搞,想将文件转化成byte[],再走老路子,我想问的第一个问题:文件转化成byte[]后再传,是不是太大,socket支持么?

第二个问题是:我想将文件拖拽到聊天框然后点击“发送”,我的聊天框是2个richtextbox,怎么让他识别我拖拽过来的文件呢? --------------------编程问答-------------------- 补充:拖拽的时候,我只要这form读到这个文件的路径和名称就可以了 --------------------编程问答--------------------
引用楼主 iey000 的回复:
我想问的第一个问题:文件转化成byte[]后再传,是不是太大,socket支持么?

文件可以读一部分,发送一部分,没必要一次性读完,再发送.

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


RicheTextBox rtb;
rtb.EnableAutoDragDrop = true;
处理DragDrop事件:

string[] formats = e.Data.GetFormats();
foreach (string fmt in formats)
{
   if (fmt == "FileNameW"){//todo}
}
--------------------编程问答-------------------- Socket文件传输实例:http://download.csdn.net/source/2474322 --------------------编程问答-------------------- 拆成8K、16K之类的包。

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

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

我只是想表达一下:让大侠们回答的时候,可以拿richtextbox来回答。。我不要原理,原理我懂,搞了这么久oop了,我只是想要具体代码 --------------------编程问答--------------------
引用 3 楼 huwen7565833 的回复:
Socket文件传输实例:http://download.csdn.net/source/2474322

你的那些对我没用。。。。白送了你2个积分。。。。
我的socket类自己已经有了,这个项目很庞大的,我只是将了其中一个小功能(传文件)而已,我不可能为了这个将我的类改成你的类。。。
只要帮我回答一下:
1、socket协议限制文件大小么?限制的话,是多少呢?
2、拖拽的时候,怎么操作呢?(用richtextbox为例说明,我用的是vs2005,只要将文件拖拽到rtb的时候,rtb显示文件的路径+文件名就好)
--------------------编程问答-------------------- 没人回答么?那我换个问题
   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时触发的事件,我里面现在什么都没写。我现在想要实现:拖拽进去的文件转化成二进制,帮忙在这个事件中添加一点代码 --------------------编程问答-------------------- --------------------编程问答-------------------- 。。。。那再简单一点吧,怎么把文件(可能是mp4,text,exe),转化成byte[]
然后怎么转回来? --------------------编程问答-------------------- 补充:知道文件路径~~~ --------------------编程问答--------------------
引用 4 楼 sp1234 的回复:
拆成8K、16K之类的包。

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


请问这位朋友,内存对齐对协议设定的影响大吗?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,