以下代码为服务端发送文件代码,为什么当同时发送文件给两个用户时,接受第二个用户发送的信息就为乱码?消息为英文?using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Xml;namespace FileSendServer
{
    public partial class SendFile : Form
    {
        public SendFile()
        {
            InitializeComponent();
        }
        //传送文件所在服务器IP
        private string clientIP = "";
        //传送文件路径
        private string filename = "";
        private Socket ServerSocket;//服务端运行的SOCKET
        private Socket ServerSocket1;//服务端运行的SOCKET
        private Thread ServerThread;//服务端运行的线程
        private Thread th;
        private Socket[] ClientSocket;//为客户端建立的SOCKET连接
        private int ClientNumb;//存放客户端数量
        private byte[] MsgBuffer;//存放消息数据
        private void Form1_Load(object sender, EventArgs e)
        {            clientIP = "192.168.10.15";
            filename ="";
            //创建客户连接侦测
            interception();        }        /// <summary>
        /// //创建客户连接侦测
        /// </summary>
        private void interception()
        {
            try
            {
                int inport;
                IPAddress hostIP = Dns.GetHostEntry(clientIP).AddressList[0];  //将主机名或 IP 地址解析为 IPHostEntry 实例。
                //将网络端点表示为 IP 地址和端口号。
                IPEndPoint ep = new IPEndPoint(hostIP, 11000);          //用指定的地址和端口号初始化 IPEndPoint 类的新实例。 
                ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                ServerSocket.Bind(ep);//将SOCKET接口和IP端口绑定
                ServerSocket.Listen(10);//开始监听,并且挂起数为10
                ServerThread = new Thread(RecieveAccept);//将接受客户端连接的方法委托给线程
                ServerThread.Start();//线程开始运行
                ClientSocket = new Socket[65535];//为客户端提供连接个数
                MsgBuffer = new byte[1024];//消息数据大小
                ClientNumb = 0;//数量从0开始统计
                CheckForIllegalCrossThreadCalls = false;//不捕获对错误线程的调用
            }
            catch (SocketException ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }        /// <summary>
        /// 开启新端口进行文件发送(挂起线程)
        /// </summary>
        private void SocketBind()
        {
            IPAddress hostIP = Dns.GetHostEntry(clientIP).AddressList[0];  //将主机名或 IP 地址解析为 IPHostEntry 实例。
            int InPort=12000;
            //获取客户端文件XLM
            XmlDocument FileInfo = new XmlDocument();
            FileInfo.Load(Application.StartupPath + @"\FileInfo.xml");
            XmlNode xne = FileInfo.SelectSingleNode("Server");
            XmlNodeList xn = xne.ChildNodes;
            foreach (XmlNode xf in xn)
            {
                XmlElement xe = (XmlElement)xf;
                string sort = xe.InnerText.ToString().Trim();
                InPort = Convert.ToInt32(xe.Name.ToString().Substring(1,xe.Name.Length-1));
                if (sort == "0")
                {
                    xe.InnerText = "1";
                    break;
                }
            }
            //保存編輯后的文件信息XML
            FileInfo.Save(Application.StartupPath + @"\FileInfo.xml");
            //将网络端点表示为 IP 地址和端口号。
            IPEndPoint ep = new IPEndPoint(hostIP,InPort);
            ClientSocket[ClientNumb].Send(Encoding.Default.GetBytes(InPort.ToString()));
            ServerSocket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            ServerSocket1.Bind(ep);
            ServerSocket1.Listen(10);
            CheckForIllegalCrossThreadCalls = false;//不捕获对错误线程的调用
            ClientSocket[ClientNumb] = ServerSocket1.Accept();
            //RecieveCallBack(IAsyncResult AR)
            ParameterizedThreadStart s = new ParameterizedThreadStart(SendFiles);
            th = new Thread(s);
            th.Start(ClientSocket[ClientNumb]);
        }        /// <summary>
        /// 监听客户端连接
        /// </summary>
        private void RecieveAccept()
        {
            while (true)
            {
                ClientSocket[ClientNumb] = ServerSocket.Accept();
                //连接成功,记录连接信息
                this.ClientList.Items.Add(ClientSocket[ClientNumb].RemoteEndPoint.ToString() + "成功连接服务器.");
                ClientNumb++;
                //创建新的发送文件对象
                SocketBind();
            }
        }        /// <summary>
        /// 发送文件
        /// </summary>
        /// <param name="obj"></param>
        void SendFiles(object obj)
        {
            Socket ClientSocket = (Socket)obj;
            int btyes;
            //获取更新文件信息
            btyes = ClientSocket.Receive(MsgBuffer);
            //获取客户短传来的更新文件信息
            string file = Encoding.Default.GetString(MsgBuffer, 0, btyes);
            if (file != "")
            {
                string[] val = file.Split('-');
                string sendfile = "";
                for (int h = 0; h < val.Length; h++)
                {
                    //获取文件大小
                    string filepath = Application.StartupPath + @"\" + val[h].ToString().Trim();
                    FileStream fl = new FileStream(filepath, FileMode.Open, FileAccess.Read);
                    int filelength = (int)fl.Length;
                    if (h == val.Length - 1)
                    {
                        sendfile = sendfile + filelength.ToString().Trim() + "," + val[h].ToString().Trim();
                    }
                    else
                    {
                        sendfile = sendfile + filelength.ToString().Trim() + "," + val[h].ToString().Trim() + "-";
                    }
                }
                //发送总文件个数、当前文件大小、文件名含后缀名(字符串形式,以“/”区分)
                ClientSocket.Send(Encoding.Default.GetBytes(sendfile));
                //接收客戶端接受信息的完成指令
                btyes = ClientSocket.Receive(MsgBuffer);
                //獲取指令字符串
                string dictate = Encoding.Default.GetString(MsgBuffer, 0, btyes);
                //判斷客戶端接收文件信息是否成功
                if (dictate == "StrOK")
                {
                    for (int j = 0; j < val.Length; j++)
                    {
                        /*发送文件*/
                        //获取发送文件路径
                        filename = Application.StartupPath + @"\" + val[j].ToString().ToString();
                        //文件实例化
                        FileStream fileSteam = new FileStream(filename, FileMode.Open, FileAccess.Read);
                        //将发送的文件包切成1024字节的文件包
                        while (fileSteam.Position < fileSteam.Length)
                        {
                            int readSize = fileSteam.Read(MsgBuffer, 0, MsgBuffer.Length);
                            if (readSize > 0)
                            {
                                //发送文件包
                                ClientSocket.Send(MsgBuffer, readSize, SocketFlags.None);
                            }
                        }
                        //接收客戶端收取發送文件完成的指令
                        btyes = ClientSocket.Receive(MsgBuffer);
                        dictate = Encoding.Default.GetString(MsgBuffer, 0, btyes);
                    }
                    ClientSocket.Shutdown(SocketShutdown.Both);
                    ClientSocket.Close();
                }
            }
        }