socket通信例子Word格式.docx
《socket通信例子Word格式.docx》由会员分享,可在线阅读,更多相关《socket通信例子Word格式.docx(14页珍藏版)》请在冰点文库上搜索。
![socket通信例子Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-4/28/62f98fa7-ea3d-45d8-8d7b-3e3122d1d036/62f98fa7-ea3d-45d8-8d7b-3e3122d1d0361.gif)
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)
成功联接到网关"
联接网关失败"
while(datareader.Read())
stringspnumber=datareader["
spnumber"
].ToString().Trim();
stringchargenumber=datareader["
chargenumber"
stringusernumber=datareader["
usernumber"
stringservicetype=datareader["
servicetype"
bytefeetype=Byte.Parse(datareader["
feetype"
].ToString().Trim());
stringfeevalue="
/datareader["
feevalue"
string"
content=datareader["
content"
byte[]submit=sgip_test.submit(spnumber,chargenumber,usernumber,servicetype,feetype,feevalue,content,CorpId,count);
send.Send(submit,submit.Length,0);
//sumbmit
//submit_resp
flag=sgip_test.submit_resp_result(receive);
手机号:
"
+usernumber+"
业务代码:
+servicetype+"
SP下行:
+spnumber);
消息内容:
+content);
消息发送成功"
stringdel_sql="
deletefromsendwhereid="
+datareader["
id"
sqlserver.ExecuteSqland(del_sql);
消息发送失败"
datareader.Close();
byte[]unbind=sgip_test.unbind(count);
send.Send(unbind,unbind.Length,0);
//unbind
send.Receive(receive,20,0);
//unbind_resp只有消息头
send.Close();
temp=null;
else
//如果没有记录的话,就马上删除联接,不然要超时出错
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="
+UserNumber;
//还没有加入手机号是否正确的识别
byte[]user_number=Encoding.ASCII.GetBytes(pack.into_string(UserNumber,21));
if(ChargeNumber.Length<
1)
//chargenumber不写的话,默认为接收手机计费
ChargeNumber=UserNumber;
(ChargeNumber.Substring(0,2).Equals("
ChargeNumber="
+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;
case3:
//对“计费用户”按包月收取信息费
more_late_to_mtflag=3;
break;
default:
//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("
bytereport_flag=1;
//暂时写成这个
bytetp_pid=0;
//暂时写成这个,具体的不知道008或者15
bytetp_udhi=0;
//暂时写成这个,具体的不知道
bytemessage_coding=0;
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=pack.Int2Bytes((uint)message_content.Length);
//消息体
intMessage_Length=0;
//4字节
uintmand_ID=0x3;
//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);
seq_num.CopyTo(content,8);
sp_number.CopyTo(content,20);
//21字节
charge_number.CopyTo(content,41);
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;
content[113]=more_late_to_mtflag;
content[114]=priority;
expire_time.CopyTo(content,115);
//16字节
schedule_time.CopyTo(content,131);
content[147]=report_flag;
content[148]=tp_pid;
content[149]=tp_udhi;
content[150]=message_coding;
content[151]=message_type;
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+"
"
+ChargeNumber+"
add_sql=add_sql+"
+UserNumber+"
+ServiceType+"
+FeeType.ToString()+"
+FeeValue+"
+MessageContent+"
+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;
uintmand_ID=0x2;
byte[]msg_len=pack.Int2Bytes(message_length);
/