1. 程式人生 > >socket伺服器傳送大資料,客戶端迴圈接收

socket伺服器傳送大資料,客戶端迴圈接收

伺服器端程式碼:

 public void SendTextMsg(string str)
        {
            int maxlength = 1000;
            int page = 0;
            if (str.Length % maxlength == 0)
            {
                page = str.Length / maxlength;
            }
            else
            {
                page = str.Length / maxlength + 1
; } for (int i = 0; i < page; i++) { string tmp = null; if (i < page - 1) { tmp = str.Substring(i * maxlength, maxlength); } else { tmp = str.Substring(i * maxlength); } var
jobj = new { total = page, index = i, data = tmp }; string jstr = Newtonsoft.Json.JsonConvert.SerializeObject(jobj); string bstr = Common.ToBase64(jstr);//編碼轉換,起到加密和防止漢字亂碼的作用 //System.Diagnostics.Debug.WriteLine("{0} {1}", jstr.Length, jstr);
base.Send(bstr+"#end#"); } }

客戶端程式碼:

try
            {
                chksocket();
                string jstr = getpara(msg, cmd);
                string mm = string.Format("LOGA {0}\r\n", jstr);
                byte[] buffer = Encoding.UTF8.GetBytes(mm);
                _socket.Send(buffer);
                Dictionary<int, string> data = new Dictionary<int, string>();
                string tmpData = "";
                while (true)
                {
                    buffer = new byte[1];
                    int rev = _socket.Receive(buffer);
                    string result = Encoding.UTF8.GetString(buffer);
                    tmpData += result;
                    if (tmpData.EndsWith("#end#"))
                    {
                        //編碼轉換,起到加密和防止漢字亂碼的作用
                        string jstr = Common.FromBase64(tmpData.Replace("#end#", ""));
                        JObject jobj = JObject.Parse(jstr);
                        int index = int.Parse(jobj["index"].ToString());
                        string ds = jobj["data"].ToString();
                        int total = int.Parse(jobj["total"].ToString());
                        data.Add(index, ds);
                        tmpData = "";
                        if (data.Count == total)
                        {
                            break;
                        }
                    }
                }
                Dictionary<int, string> dic = data.OrderBy(p => p.Key).ToDictionary(p => p.Key, o => o.Value);
                StringBuilder sb = new StringBuilder();
                foreach (KeyValuePair<int, string> item in dic)
                {
                    sb.Append(item.Value);
                }
                return sb.ToString();
            }
            catch (Exception e)
            {
                throw e;
            }