socket通信例子Word格式.docx

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

socket通信例子Word格式.docx

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

socket通信例子Word格式.docx

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 

对“计费用户”免费 

对“计费用户”按条计信息费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);

/

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

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

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

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