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小时内删除。
发表评论