socket通信例子.docx

上传人:b****1 文档编号:28077 上传时间:2023-04-28 格式:DOCX 页数:14 大小:18.53KB
下载 相关 举报
socket通信例子.docx_第1页
第1页 / 共14页
socket通信例子.docx_第2页
第2页 / 共14页
socket通信例子.docx_第3页
第3页 / 共14页
socket通信例子.docx_第4页
第4页 / 共14页
socket通信例子.docx_第5页
第5页 / 共14页
socket通信例子.docx_第6页
第6页 / 共14页
socket通信例子.docx_第7页
第7页 / 共14页
socket通信例子.docx_第8页
第8页 / 共14页
socket通信例子.docx_第9页
第9页 / 共14页
socket通信例子.docx_第10页
第10页 / 共14页
socket通信例子.docx_第11页
第11页 / 共14页
socket通信例子.docx_第12页
第12页 / 共14页
socket通信例子.docx_第13页
第13页 / 共14页
socket通信例子.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

socket通信例子.docx

《socket通信例子.docx》由会员分享,可在线阅读,更多相关《socket通信例子.docx(14页珍藏版)》请在冰点文库上搜索。

socket通信例子.docx

socket通信例子

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();

     Socketsend=temp.connectSocket(this.remote_ip,this.remote_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("手机号:

"+usernumber+"  业务代码:

"+servicetype+" SP下行:

"+spnumber);

        this.send_listbox("消息内容:

"+content);

        this.send_listbox("消息发送成功");

        stringdel_sql="deletefromsendwhereid="+datareader["id"].ToString().Trim();

        sqlserver.ExecuteSqland(del_sql);

       }

       else

        this.send_listbox("消息发送失败");

      }

      

      datareader.Close(); 

      byte[]unbind=sgip_test.unbind(count);

      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代表的用户支付;如果为全零字符串“0000”,表示该条短消息产生的费用由SP支付。

   //UserCount1字节int接收短消息的手机数量,取值X围1至100

   //UserNumber21字节text接收该短消息的手机号,该字段重复UserCount指定的次数,手机前加“86”国别标志

   //CorpId5字节text企业代码,取值X围0-99999

   //ServiceType10字节text业务代码,由SP定义

   //FeeType1字节int计费类型

   //FeeValue6字节text取值X围0-99999,该条短消息的收费值,单位为分,由SP定义对于包月制收费的用户,该值为月租费的值

   //GivenValue6字节text取值X围0-99999,赠送用户的话费,单位为分,由SP定义,特指由SP向用户发送广告时的赠送话费

   //AgentFlag1字节int代收费标志,0:

应收;1:

实收

   //MorelatetoMTFlag1字节int引起MT消息的原因0-MO点播引起的第一条MT消息;1-MO点播引起的非第一条MT消息;2-非MO点播引起的MT消息;3-系统反馈引起的MT消息。

   //Priority1字节int优先级0-9从低到高,默认为0

   //ExpireTime16字节text短消息寿命的终止时间,如果为空,表示使用短消息中心的缺省值。

时间内容为16个字符,格式为”yymmddhhmmsstnnp”,其中“tnnp”取固定值“032+”,即默认系统为时间

   //ScheduleTime16字节text短消息定时发送的时间,如果为空,表示立刻发送该短消息。

时间内容为16个字符,格式为“yymmddhhmmsstnnp”,其中“tnnp”取固定值“032+”,即默认系统为时间

   //ReportFlag1字节int状态报告标记0-该条消息只有最后出错时要返回状态报告1-该条消息无论最后是否成功都要返回状态报告2-该条消息不需要返回状态报告3-该条消息仅携带包月计费信息,不下发给用户,要返回状态报告其它-保留缺省设置为0

   //TP_pid1字节intGSM协议类型。

详细解释请参考GSM03.40中的9.2.3.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));

   

   bytecou=1;

   if(!

(UserNumber.Substring(0,2).Equals("86")))

    UserNumber="86"+UserNumber;  //还没有加入手机号是否正确的识别

   byte[]user_number=Encoding.ASCII.GetBytes(pack.into_string(UserNumber,21));

   if(ChargeNumber.Length<1) //chargenumber不写的话,默认为接收手机计费

    ChargeNumber=UserNumber;

   else

   {

    if(!

(ChargeNumber.Substring(0,2).Equals("86")))

     ChargeNumber="86"+ChargeNumber;

   }

   byte[]charge_number=Encoding.ASCII.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));//不填写

   bytereport_flag=1;//暂时写成这个

   bytetp_pid=0;//暂时写成这个,具体的不知道008或者15

   bytetp_udhi=0;//暂时写成这个,具体的不知道

   bytemessage_coding=0;//暂时写成这个,具体的不知道

   //MessageCoding1字节int短消息的编码格式。

0:

纯ASCII字符串3:

写卡操作4:

二进制编码8:

UCS2编码15:

GBK编码其它参见GSM3.38第4节:

SMSDataCodingScheme

   bytemessage_type=0;

   byte[]message_content=Encoding.Default.GetBytes(MessageContent); //没有验证内容长度

   intmessage_length=0;//

   //byte[]msg_len=Int2Bytes((uint)message_length);//中转一下数据

   byte[]reserve=Encoding.ASCII.GetBytes(pack.into_string("",8));

   intbody_length=sp_number.Length+charge_number.Length+1+user_number.Length+corp_id.Length+service_type.Length+1+fee_value.Length;

   body_length=body_length+given_value.Length+3+expire_time.Length+schedule_time.Length+5+4+message_content.Length+reserve.Length;

   //                                      agentflag,morelatetomtflag,priority       pid,udhi...messagetype

   message_length=body_length;

   //byte[]msg_len=Int2Bytes((uint)message_length);

   byte[]msg_len=pack.Int2Bytes((uint)message_content.Length);

   //消息体

   intMessage_Length=0; //4字节

   uintmand_ID=0x3;    //4字节

   //stringSequence_Number=get_sequence_number(count); //12字节

   byte[]seq_num=pack.get_sequence_number(count);

   //byte[]msg_len=Int2Bytes(Message_Length);

   byte[]_id=pack.Int2Bytes(mand_ID);

   //byte[]seq_num=Encoding.Default.GetBytes(Sequence_Number);

   //inthead_length=msg_len.Length+_id.Length+seq_num.Length;

   inthead_length=20;

   //消息头

   Message_Length=head_length+body_length;

   byte[]hmsg_len=pack.Int2Bytes((uint)Message_Length);//重新计算后再写入总体长度

         

   byte[]content=newbyte[Message_Length];//定义总体submit的包长度

   //写入数据流中          

   hmsg_len.CopyTo(content,0); //4字节 

   _id.CopyTo(content,4);  //4字节

   seq_num.CopyTo(content,8); //12字节

   //消息头

   sp_number.CopyTo(content,20); //21字节

   charge_number.CopyTo(content,41); //21字节

   content[62]=cou; //1字节

   user_number.CopyTo(content,63);//21字节

   corp_id.CopyTo(content,84);//5字节

   service_type.CopyTo(content,89);//10字节

   content[99]=FeeType;//1字节

   fee_value.CopyTo(content,100); //6字节

   given_value.CopyTo(content,106);//6字节

   content[112]=agent_flag;//1字节

   content[113]=more_late_to_mtflag;//1字节

   content[114]=priority;//1字节

   expire_time.CopyTo(content,115);//16字节

   schedule_time.CopyTo(content,131);//16字节

   content[147]=report_flag;//1字节

   content[148]=tp_pid;//1字节

   content[149]=tp_udhi;//1字节

   content[150]=message_coding;//1字节

   content[151]=message_type;//1字节

   msg_len.CopyTo(content,152);//4字节

   message_content.CopyTo(content,156);//长度为message_length

   reserve.CopyTo(content,156+message_content.Length);

   //消息体封装完毕

   stringseq_num_string=pack.get_seq_num(seq_num);//恢复出seq_num来好写入数据库,做记录用

   stringadd_sql="insertintolog_send(spnumber,chargenumber,usernumber,servicetype,feetype,feevalue,content,seq_num)values(";

   add_sql=add_sql+"'"+SPNumber+"',";

   add_sql=add_sql+"'"+ChargeNumber+"',";

           add_sql=add_sql+"'"+UserNumber+"',";

           add_sql=add_sql+"'"+ServiceType+"',";

           add_sql=add_sql+"'"+FeeType.ToString()+"',";

   add_sql=add_sql+"'"+FeeValue+"',";

   add_sql=add_sql+"'"+MessageContent+"',";

   add_sql=add_sql+"'"+seq_num_string+"')";

   sqlserver.ExecuteSqland(add_sql);

   //publicbyte[]submit(stringSPNumber,stringChargeNumber,stringUserNumber,stringServiceType,byteFeeType,stringFeeValue,stringMessageContent,stringCorpId,uintcount)

   returncontent;

  }

 

  publicbyte[]unbind(uintcount)

  {

   inti=0;

   uintmessage_length=20; //4字节

   uintmand_ID=0x2;    //4字节

   //stringSequence_Number=get_sequence_number(count); //12字节

   byte[]seq_num=pack.get_sequence_number(count);

   //byte[]msg_len=Int2Bytes(Message_Length);

   byte[]_id=pack.Int2Bytes(mand_ID);

   byte[]msg_len=pack.Int2Bytes(message_length);

   /

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2