我传送一张图片,10次里有1次能传送成功,图片完整,其余都是缺胳膊少腿的文件,图片都花了...为什么会这样啊
这里是主要的代码服务器
private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                listener = new TcpListener(8910);
                listener.Start();
                toolStripStatusLabel1.Text = "监听中...";
                thread = new Thread(new ThreadStart(recieve));
                thread.Start();
            }
            catch (Exception exce)
            {
                MessageBox.Show(exce.ToString());
            }
        }
private void recieve()
        {
            sock = listener.AcceptSocket();
            if (sock.Connected)
            {
                toolStripStatusLabel1.Text = "与客户连接中...";
                while(true)
                {
                    ns = new NetworkStream(sock);
                    if (sock.Receive(mybyte, mybyte.Length,0) != 0)
                    {
                        
                        ns.Flush();
                        String filename = System.Text.Encoding.ASCII.GetString(mybyte).Trim(new char[]{'\0'});
                        fs = new FileStream("e:\\to\\"+filename, FileMode.OpenOrCreate);
                        
                        while (sock.Reseive(mybyte,mybyte.Length,0) != 0)
                        {
                            fs.Write(mybyte, 0, mybyte.Length);
                        }
                    }
                    ns.Close();
                    fs.Close();
                    MessageBox.Show("接受完成");
                }            }客户端
private void button1_Click(object sender, EventArgs e)
        {
            if(openFileDialog1.ShowDialog()==DialogResult.OK)
            {
                fs=new FileStream(openFileDialog1.FileName,FileMode.Open);
                ns=mytc.GetStream();
                String filename = openFileDialog1.SafeFileName;
                mybyte=System.Text.Encoding.ASCII.GetBytes(filename.ToCharArray());
                ns.Write(mybyte, 0, mybyte.Length);
                ns.Flush();
                while (fs.Read(mybyte, 0, mybyte.Length) != 0)
                {
                    ns.Write(mybyte, 0, mybyte.Length);
                    ns.Flush();
                }
                ns.Close();
                fs.Close();
                MessageBox.Show("发送完成");
            }        }

解决方案 »

  1.   

    只听说使用UDP传送会丢失静候问题解决
      

  2.   

      fs.Write(mybyte, 0, mybyte.Length); 
    ==================
    第三个参数的值适当的加大一些。
      

  3.   

    如果图片有10K,第三个参数设置为10K,就等于一下子把图片化为流传输过去了,
    楼主这种情况我也遇到过,不过,我解决的方法是,比对文件大小字节数,如果不同 就删除接受方的文件,返回false,说明传输失败。
      

  4.   

    while (fs.Read(mybyte, 0, mybyte.Length) != 0) 

        ns.Write(mybyte, 0, mybyte.Length); 
        ns.Flush(); 

    这样写是不行的 应为FileStream类的Read()方法返回的是读取数据的实际长度
    有时候文件长度的问题 最后一次写入的长度不一定是mybyte.Length
    int factSize=0;
    while((factSize=fs.Read(mybyte,0,mybyte.Length))>0)
    {
       ns.Write(mybyte,0,a);
       ns.Flush();
    }
    你吧发送数据的地方 这样写试试
      

  5.   

    还有TCP是不可能丢包的
    估计你也是在局域网上面 更不可能了