日期:2014-05-18  浏览次数:21156 次

求助,UDP分段发送数据报的问题
如果数据报太长,UDP发送会失败,我就想分段发送,并设置尾标,由接收端处理。下面是代码,但是在接收端接收并不完整是怎么回事?(本机调试,每段发送都能收到)有时会在尾标处(" <@" + pNo + "@>" )出现乱码,那个"<"号显示不出来,初步估计是发送端的原因。下面是发送端。
C# code
        public void Send(string content, string format) 
        {
                        UdpClient client = new UdpClient();
            client.Connect(_ip, _port);
            client.DontFragment = true;
            byte[][] ndata = null;
            byte[] btformat = Encoding.GetEncoding("gb2312").GetBytes(format);
            byte[] data = Encoding.GetEncoding("gb2312").GetBytes(content);
            byte[] sign = Encoding.GetEncoding("gb2312").GetBytes("!part");
            #region 如果数据报大于1000字节,则分段
            if (data.Length > 1000)
            {
                int pNo = data.Length % 1000 == 0 ? data.Length / 1000 : data.Length / 1000 + 1;
                ndata = new byte[pNo][];
                for (int i = 0; i < pNo; i++)
                {
                    byte[] temBytes = new byte[1000];
                    if (i == pNo - 1)
                        temBytes = new byte[data.Length % 1000];
                    int add = 0;
                    for (int j = i * 1000; j < (i + 1) * 1000; j++)
                    {
                        try
                        {
                            temBytes[add] = data[j];
                            add++;
                        }
                        catch
                        {
                            goto Add;
                        }
                    }
                    goto Add;
                Add:
                    ndata[i] = temBytes;
                    //btformat.CopyTo(ndata[i], 0);
                    ndata[i] = CopyTo(btformat, ndata[i]);
                    byte[] te = ndata[i];

                    if (i != (pNo - 1)) <