socket通信例子
publicvoidsend()
  {
   
   while(true)
   {
    stringsql="selecttop100*fromsend";
    SqlDataReaderdatareader=sqlserver.ExecuteSqlDataReader(sql);
    if(datareader.HasRows)//有记录才进行网关联接
    {
     stringshow;
     stringhost;
     //intport=Convert.ToInt16("8801");
     //host=Dns.GetHostName();
     //host="192.168.123.110";
     sockettemp=newsocket();
     __port);
   
     if(send==null)
     {
      this.send_listbox("翻开远程SMG失败");
   
     }
     else
     {
      this.send_listbox("翻开远程SMG成功");
      byte[]bind_content=sgip_test.bind(count);
      count_step();
      byte[]receive=newbyte[256];
      byteflag;
      send.Send(bind_content,bind_content.Length,0);//bind
      send.Receive(receive,29,0);//bind_resp读取29位
      flag=sgip_test.bind_resp_result(receive);
      if(flag==0)
       this.send_listbox("成功联接到网关");
      else
       this.send_listbox("联接网关失败");
      while(datareader.Read())
      {
       stringspnumber=datareader["spnumber"].ToString().Trim();
       stringchargenumber=datareader["chargenumber"].ToString().Trim();
       stringusernumber=datareader["usernumber"].ToString().Trim();
       stringservicetype=datareader["servicetype"].ToString().Trim();
       bytefeetype=Byte.Parse(datareader["feetype"].ToString().Trim());
       stringfeevalue="/datareader["feevalue"].ToString().Trim();
       string"content=datareader["content"].ToString().Trim();
       byte[]submit=sgip_test.submit(spnumber,chargenumber,usernumber,servicetype,feetype,feevalue,content,CorpId,count);
       send.Send(submit,submit.Length,0);//sumbmit
       count_step();
       send.Receive(receive,29,0);//submit_resp
       flag=sgip_test.submit_resp_result(receive);
       if(flag==0)
       {
        this.send_listbox("eSqlComand(del_sql);
       }
       else
        this.send_listbox("消息发送失败");
      }
     
      datareader.Close(); 
      byte[]unbind=sgip_test.unbind(count);socket通信在哪一层
      count_step();
      send.Send(unbind,unbind.Length,0);//unbind
      send.Receive(receive,20,0);//unbind_resp只有消息头
      send.Close();
      temp=null;
     }
    }
    else
    datareader.Close();//要是没有记录的话,就马上删除联接,不然要超时出错
         Thread.Sleep(100);
   }
  }
数据写进字节流
  publicbyte[]submit(stringSPNumber,stringChargeNumber,stringUserNumber,stringServiceType,byteFeeType,stringFeeValue,stringMessageContent,stringCorpId,uintcount)
    {
   //SPNumber21字节textSP的接进号码 
   //ChargeNumber 21字节text付费号码,号码前加“86”国不标志;当且仅当发且对用户收费时为空;要是为空,那么该条短消息产生的费用由UserNumber代表的用户支付;要是为全零字符串“000000000000000000000”,表示该条短消息产生的费用由SP支付。
   //UserCount1字节int接收短消息的数量,取值范围1至100
   //UserNumber21字节text接收该短消息的号,该字段重复UserCount指定的次数,号码前加“86”国不标志
   //CorpId5字节text企业代码,取值范围0-99999
   //ServiceType10字节text业务代码,由SP定义
   //FeeType1字节int.9
   //TP_udhi1字节intGSM协议类型。具体解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
   //MessageCoding1字节int短消息的编码格式。0:纯ASCII字符串3:写卡操作4:二进制编码8:UCS2编码15:GBK编码其它参见GSM3.38第4节:SMSDataCodingScheme
   //MessageType1字节int信息类型:0-短消息信息其它:待定
   //MessageLength4字节int短消息的长度
   //MessageContentText短消息的内容
   //Reserve8字节text保持,扩展用
           
   
   //feetype
   //计费类不定义
   //用户计费类不 描述
   //0 “短消息类型〞为“发送〞,对“计费用户号码〞不计信息费,此类话单仅用于核减SP对称的信道费
   //1 对“计费用户号码〞免费 2 对“计费用户号码〞按条计信息费3 对“计费用户号码〞按包月收取信息费4 对“计费用户号码〞的收费是由SP实现
   byte[]sp_number=Encoding.ASCII.GetBytes(pack.into_string(SPNumber,21));
   
SCII.GetBytes(pack.into_string(ChargeNumber,21));
   byte[]corp_id=Encoding.ASCII.GetBytes(pack.into_string(CorpId,5));
   byte[]service_type=Encoding.ASCII.GetBytes(pack.into_string(ServiceType,10));
   byte[]fee_value="/Encoding.ASCII.GetBytes(pack.into_string(FeeValue,6));
   byte[]"given_value="/Encoding.ASCII.GetBytes(pack.into_string(""",6));//不填写
   byteagent_flag=1;//实收
   bytemore_late_to_mtflag;
   switch(FeeType) //对momt_flag做处理
   {
    case1://对“计费用户号码〞免费
                 more_late_to_mtflag=0;
     break;
    case2: //对“计费用户号码〞按条计信息费
     more_late_to_mtflag=0;
     break;
    case3://对“计费用户号码〞按包月收取信息费
                   more_late_to_mtflag=3;
      break;
    default:
     more_late_to_mtflag=0;
      break;
   }
   //if(feetype==1)//2按条计信息费
    //more_late_to_mtflag=0;//临时写成那个包月时写3
   bytepriority=0;
   byte[]expire_time=Encoding.ASCII.GetBytes(pack.into_string("",16));//不填写
   byte[]schedule_time=Encoding.ASCII.GetBytes(pack.into_string("",16));//不填写

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。