写了一个 类似QQ的文件传输的功能   利用socket 监听端口来完成的 TcpListener L = new TcpListener(IPAddress.Parse("127.0.0.1"), 59000); 监听59000 端口   Thread T = new Thread(new ThreadStart(this.SetFile));
                                        T.Start();
放到线程里运行 不过碰到了个问题 如果我传输两个文件 因为是在同一个端口里传输 结构就是把 俩个文件写成一个了 路径是第一个文件的是在(第一个文件还没传玩的情况下 如果第一个传完了就正常了我的文件默认写成rar的)有什么办法可以在同一端口 上接收多个文件(不想做在开端口了) 不知道 异步能完成不 因为文件比较大我的缓存区时 byte[30000]用了一个
 TcpListener L = new TcpListener(IPAddress.Parse("127.0.0.1"), 59000);
            L.Start(); 
while(true)
{
      Socket S = L.AcceptSocket();
}
来循环接收
下面是 监听方法的源代码该方法也是写出文件的方法
  
  private void CL()
        {
           
            TcpListener L = new TcpListener(IPAddress.Parse("127.0.0.1"), 59000);
            L.Start();
            while (true)
            {
                Socket S = L.AcceptSocket();
                byte[] sender = new byte[30000];   
                int count = S.Receive(sender, 30000, SocketFlags.None);
                bool sfwjm = false;
                string fn2 = "";
                int x = 0;
                for (int i = 0; i < sender.Length; i++)   //文件名
                {
                    if (sender[i] == '#')
                    {
                        x = i;
                        break;
                    }
                    if (sfwjm == true)
                    {
                        fn2 += Convert.ToChar(sender[i]).ToString();
                    }
                    if (sender[i] == '$')
                    {
                        sfwjm = true;
                    }
                }                this.saveFileDialog1.Filter = "文件|*." + fn2.Substring(fn2.Length - 3);  //
                this.saveFileDialog1.ShowDialog();
                string fn = this.saveFileDialog1.FileName;                FileStream fs = new FileStream(fn, FileMode.OpenOrCreate, FileAccess.ReadWrite);  //读取流
                BinaryWriter bw = new BinaryWriter(fs);
                bw.Write(sender, x, count);
                Prog pr = new Prog(Progress);  //委托
                while (true)                                           //循环写出
                {
                    count = S.Receive(sender, 30000, SocketFlags.None);
                    if (count == 0)
                    {
                        break;
                    }                    bw.Write(sender, 0, count);
                    BeginInvoke(pr);                    //委托调用方法 此方法用来增长进度条
                }
                fs.Close();
                bw.Close();
                MessageBox.Show("接收完毕");
                NullProg np = new NullProg(NullProgress);   //委托
                BeginInvoke(np);                            // 调用方法 使控件隐藏}