网络编程之公共方法

在网络编程中经常需要发送/接受数据,故将经常运用到的方法放入到一个类库中,方便在各个地方调用。

此类库主要引用的命名空间是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,779评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,618评论 25 708
  • 前段时间,在项目中有个需求是支付完成后,弹出红包,实现这么一个发红包的功能。做了最后,实现的效果大致如下: 一、使...
    HenryCheng阅读 22,899评论 31 119
  • 七月初七后的第三天,我还在回忆;七月初七后的第三个夜晚,依旧对影成三人;七月初七后的这一刻,我决定用文字定格思考,...
    虫鸣吹晚风阅读 370评论 0 0
  • 今日(9月17日),乔任梁经纪公司发表声明,对乔任梁的死因做出了说明,声明中称,乔任梁从去年罹患抑郁症,备受折磨,...
    猎场君阅读 991评论 0 1