none
SOCKET TCP 文件内容发送 RRS feed

  • 问题

  • 我用socket 为什么只能发送打开文件的第一行?奇怪 求解

    public partial class Form1 : Form
        {
           
            public Form1()
            {
                InitializeComponent();
            }
           StreamReader  reader;
            StreamWriter sw;
            private NetworkStream ns;
            private TcpClient tc;

            private void button1_Click(object sender, EventArgs e)
            {
                tc = new TcpClient("192.168.1.101", 8888);
               
                OpenFileDialog openFileDialog1 = new OpenFileDialog();
                openFileDialog1.InitialDirectory = @"\Storage Card";
                openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
                openFileDialog1.FilterIndex = 2;
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string filePath = openFileDialog1.FileName;
                    //MessageBox.Show(file);
                    reader = new StreamReader(filePath);
                    timer1.Enabled = true;
                }
            }

            private void timer1_Tick(object sender, EventArgs e)
            {
                if (reader.Peek() > -1)
                {
                    ns = tc.GetStream();
                  sw = new StreamWriter(ns );  
                    string line = reader.ReadLine();
                    sw.WriteLine(line);
                    sw.Flush();
                   listBox1.Items.Add(line);
                }
                else
                {
                    timer1.Enabled = false;
                    MessageBox.Show("文件发送完毕!");
                    sw.Close();
                   
                }
            }
        }

    2010年4月22日 9:28

答案

  • 你好!

         这两行代码:

    ns = tc.GetStream();
    sw = new StreamWriter(ns );

    不要放到Timer_Tick里,放到外面,不然每次都是构造新的流了,你接受的时候接受的是第一个流!


    周雪峰
    2010年4月25日 3:22
    版主

全部回复

  • 你好!

    ReadLine 是读取一行,这里应该改为 

    string line = reader.ReadToEnd();


    知识改变命运,奋斗成就人生!
    2010年4月22日 9:42
    版主
  • 你好!

    ReadLine 是读取一行,这里应该改为 

    string line = reader.ReadToEnd();

    知识改变命运,奋斗
    成就人生!

    版主:我的意思是 隔一段时间读取文件一行数据,并发送。。。。如果这样“string line = reader.ReadToEnd();”程序读一行就结束了。。。。。版主再看看
    2010年4月22日 10:40
  • 你好!

         这两行代码:

    ns = tc.GetStream();
    sw = new StreamWriter(ns );

    不要放到Timer_Tick里,放到外面,不然每次都是构造新的流了,你接受的时候接受的是第一个流!


    周雪峰
    2010年4月25日 3:22
    版主