private int FileSend()
        {
            int res = 0;
            svr = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            svr.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            IPEndPoint seip = new IPEndPoint(IPAddress.Parse(Service.ConnIP), 12000);
            svr.Connect(seip);
                try
                {
                    for (int i = 0; i < al.Count; i++)
                    {
                        if (svr.Connected)
                        {
                            string file = al[i].ToString();
                            string filename = Path.GetFileName(file);
                            FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
                            BinaryReader br = new BinaryReader(fs);
                            byte[] fileread = new byte[0];
                            br.BaseStream.Seek(0, SeekOrigin.Begin);
                            fileread = br.ReadBytes((int)br.BaseStream.Length);
                            svr.Send(Service.FilePackage(12, Service.UserNumber, @"\Code", filename, fileread));
                            fs.Close();
                            br.Close();
                        }
                    }
                    //skt.Send(BitConverter.GetBytes(13));
                    res = 1;
                }                catch { res = 0; }            return res;
        }这是一个我用来发送文件的函数。文件路径存在al[]这个数组中,可是我每次调试的时候,socket的send()函数只执行第一次,我在Server端只能收到第一个文件,后面的循环无任何反应。想知道到底是何原因导致的。求解......

解决方案 »

  1.   

    汗一个,你server端怎么写的呢,应该是socket.receive方法,并且收完一条要再调用(用委托事件) receive方法
      

  2.   

    server端我开了一个TcpListener的线程,负责所有的侦听和接收工作,当然接收的时候还会再开辟新的线程。暂时客户端是每一次循环新建一个socket再关闭,太费资源了...socket这块刚入手,还有待好好学习.....
      

  3.   

    diegod
    大概是缓存来不及释放造成的吧是客户端的缓存??上面的那个函数是用在客户端向服务器端发送文件的。如果我每次循环都新建一个socket,发完后关闭,服务器端是可以接收到所有的文件的。但是如果只用一个socket,循环中不断调用send()方法,服务器端只会收到第一个文件。客户端后面的循环无效。