網絡編程之公共方法

在網絡編程中經常需要發送/接受數據,故將經常運用到的方法放入到一個類庫中,方便在各個地方調用。

此類庫主要引用的命名空間是System及System.Net.Scokets。

下面呈上代碼:

/// <summary>
/// 接收變長的數據,要求其打頭的4個字節代表有效數據的長度
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static byte[] ReceiveVarData(Socket s)
{
      if (s == null)
           throw new ArgumentNullException("s");
      int total = 0;  //已接收的字節數
      int recv;
      //接收4個字節,得到“消息長度”
      byte[] datasize = new byte[4];
      recv = s.Receive(datasize, 0, 4, 0);
      int size = BitConverter.ToInt32(datasize, 0);
      //按消息長度接收數據
      int dataleft = size;
      byte[] data = new byte[size];
      while (total < size)
      {
           recv = s.Receive(data, total, dataleft, 0);
           if (recv == 0)
           {
                break;
           }
           total += recv;
           dataleft -= recv;
      }
      return data;
}
/// <summary>
/// 發送變長的數據,將數據長度附加于數據開頭
/// </summary>
/// <param name="s"></param>
/// <param name="data"></param>
/// <returns></returns>
public static int SendVarData(Socket s, byte[] data)
{
     int total = 0;
     int size = data.Length;  //要發送的消息長度
     int dataleft = size;     //剩余的消息
     int sent;
     //將消息長度(int類型)的,轉為字節數組
     byte[] datasize = BitConverter.GetBytes(size);
     //將消息長度發送出去
     sent = s.Send(datasize);
     //發送消息剩余的部分
     while (total < size)
     {
          sent = s.Send(data, total, dataleft, SocketFlags.None);
          total += sent;
          dataleft -= sent;
      }
      return total;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,315評論 25 708
  • 前段時間,在項目中有個需求是支付完成后,彈出紅包,實現這么一個發紅包的功能。做了最后,實現的效果大致如下: 一、使...
    HenryCheng閱讀 22,893評論 31 119
  • 七月初七后的第三天,我還在回憶;七月初七后的第三個夜晚,依舊對影成三人;七月初七后的這一刻,我決定用文字定格思考,...
    蟲鳴吹晚風閱讀 370評論 0 0
  • 今日(9月17日),喬任梁經紀公司發表聲明,對喬任梁的死因做出了說明,聲明中稱,喬任梁從去年罹患抑郁癥,備受折磨,...
    獵場君閱讀 973評論 0 1