網(wǎng)絡(luò)編程之公共方法

在網(wǎng)絡(luò)編程中經(jīng)常需要發(fā)送/接受數(shù)據(jù),故將經(jīng)常運用到的方法放入到一個類庫中,方便在各個地方調(diào)用。

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

下面呈上代碼:

/// <summary>
/// 接收變長的數(shù)據(jù),要求其打頭的4個字節(jié)代表有效數(shù)據(jù)的長度
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public static byte[] ReceiveVarData(Socket s)
{
      if (s == null)
           throw new ArgumentNullException("s");
      int total = 0;  //已接收的字節(jié)數(shù)
      int recv;
      //接收4個字節(jié),得到“消息長度”
      byte[] datasize = new byte[4];
      recv = s.Receive(datasize, 0, 4, 0);
      int size = BitConverter.ToInt32(datasize, 0);
      //按消息長度接收數(shù)據(jù)
      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>
/// 發(fā)送變長的數(shù)據(jù),將數(shù)據(jù)長度附加于數(shù)據(jù)開頭
/// </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;  //要發(fā)送的消息長度
     int dataleft = size;     //剩余的消息
     int sent;
     //將消息長度(int類型)的,轉(zhuǎn)為字節(jié)數(shù)組
     byte[] datasize = BitConverter.GetBytes(size);
     //將消息長度發(fā)送出去
     sent = s.Send(datasize);
     //發(fā)送消息剩余的部分
     while (total < size)
     {
          sent = s.Send(data, total, dataleft, SocketFlags.None);
          total += sent;
          dataleft -= sent;
      }
      return total;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容