(1)目前正在做一个项目用的是tcp/ip协议进行数据的传输;我已经实现了局域网中1台机子向另一台机子传输一份txt文件的功能;
(2)下面我需要解释的问题如下:  协议中的数据报与传输的txt文件是什么关系?
                                 使用tcp/ip协议传输的txt文件大小有限制吗?
                                 需要实现每20ms传一个数据文件的操作,怎么改进?
                                 从4台客户机向服务器传输数据怎么改进?
能解决的主要先帮我解决下每20ms实时传输的问题。

解决方案 »

  1.   

    限制是没有了。。但是如果你的TXT文件200M以上。。你不可能一次用200M内存全部加载进去吧
    可以用个TIME控件
    异步
      

  2.   

    协议中的数据报与传输的txt文件没关系.
    使用tcp/ip协议传输的txt文件大小没限制.
    需要实现每20ms传一个数据文件的操作,可以通过先把任务加入队列,然后一个线程从队列中依次传送,使用Socket.SendFile或者Socket.SendPacketsAsync来提高传输速度,这两个方法可以避免读取文件与传送时反复的进行用户态——内核态的切换。
      

  3.   

    我对于传输还有个问题,实现如下图片的传输:(下为发送端)
    我在接受端使用FileStream,让发送端的文件内容存储到接受端的临时文件中。
    这样传输1个文件是可以的,但是,如果传输了1个文件后再传输1个文件接受端就没有响应了。有什么好的方法可以解决这个问题。
      

  4.   

    接受进程的部分代码如下 //创建一个网络端点
     IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse("2005"));
     //创建一个套接字
    Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     //绑定套接字到端口
     server.Bind(ipep); //开始侦听(并堵塞该进程)
     server.Listen(10); //确认连接
      Socket client = server.Accept();
      //获取客户端节点对象
       IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;  //获得[文件名]
     string SendFileName = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));  //创建临时文件     
    FileStream MyFileStream = new FileStream(System.AppDomain.CurrentDomain.BaseDirectory +"temp.txt", FileMode.Create, FileAccess.Write);
         
      //已发送包的个数
       int SendedCount = 0;
       //实例化UnicodeEncoding对象用于转换。
         UnicodeEncoding unicode = new UnicodeEncoding();            while (true)
                {
                    byte[] data = TransferFiles.ReceiveVarData(client);
                    if (data.Length == 0)
                    {
                        break;
                    }
                    else
                    {
                        SendedCount++;
                        //将接收到的数据包写入到文件流对象
                        MyFileStream.Write(data, 0, data.Length);
                        //显示已发送包的个数
                        //MessageBox.Show("已发送包个数"+SendedCount.ToString());                }
                }            MyFileStream.Close();由于1个文件传输完毕了,MyFileStream关闭了,在传输下一个文件时就没法进行了。我这里的临时文件的作用是把文件中的内容导入进接受端的数据库中的。
    怎么解决这个问题。
      

  5.   

    感谢xu56180825、lizhibin11和mervyn807的回答,我现在想找个例程来看看,先了解一下传送和接受两个线程的实现。初步想法是采用轮询的方法,把A计算机中的文件依次传送到B计算机中。有没有类似的例程,谁有的或是看到的分享一下,谢谢大家了~~