socket通信例子
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
socket通信例子
string sql="select top 100 * from send";
SqlDataReader datareader =sqlserver.ExecuteSqlDataReader(sql);
if (datareader.HasRows) //有记录才进行网接洽关系接
{
string show;
string host;
//int port =Convert.ToInt16("8801");
//host = Dns.GetHostName();
//host = "192.168.123.110";
socket temp=new socket();
Socket
send=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=new byte[256];
byte flag;
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())
{
string
spnumber=datareader["spnumber"].ToString().Trim();
string
chargenumber=datareader["chargenumber"].ToString().Trim();
string
usernumber=datareader["usernumber"].ToString().Trim();
string
servicetype=datareader["servicetype"].ToString().Trim();
byte
feetype=Byte.Parse(datareader["feetype"].ToString().Trim());
string
feevalue="/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("消息发送成功");
string del_sql="delete from send where id="+datareader["id"].ToString().Trim();
sqlserver.ExecuteSqlComand(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);
}
}
数据写入字撙节
public byte[] submit(string SPNumber,string ChargeNumber,string UserNumber,string ServiceType,byte FeeType,string FeeValue,string MessageContent,string CorpId,uint count)
{
//SPNumber 21字节 text SP的接入号码
//ChargeNumber 21字节 text付费号码,手机号码前加“86”国别标记;当且仅当群发且对用户收费时为空;假如为空,则该条短消息产生的费用由UserNumber代表的用户付出;假如为全零字符串“000000000000000000000”,表示该条短消息产生的费用由SP付出。
//UserCount 1字节 int 接收短消息的手机数量,取值范围1至100
//UserNumber 21字节text 接收该短消息的手机号,该字段反复UserCount指定的次数,手机号码前加“86”国别标记
//CorpId 5字节 text 企业代码,取值范围0-99999
//ServiceType 10字节 text 营业代码,由SP定义
//FeeType 1字节 int 计费类型
//FeeValue 6字节 text 取值范围0-99999,该条短消息的收费值,单位为分,由SP定义对于包月制收费的用户,该值为月租费的值
//GivenValue 6字节 text 取值范围0-99999,赠予用户的话费,单位为分,由SP定义,特指由SP向用户发送告白时的赠予话费
//AgentFlag 1字节 int 代收费标记,0:应收;1:实收
//MorelatetoMTFlag 1字节 int 引起MT消息的原因0-M O点播引起的第一条MT消息;1-MO点播引起的非第一条MT消息;2-非MO点播引起的MT消息;3-体系反馈引起的MT消息。
//Priority 1字节 int 优先级0-9从低到高,默认为0
//ExpireTime 16字节 text 短消息寿命的终止时光,假如为空,表示应用短消息中间的缺省值。时光内容为16个字符,格局为”yymmddhhmmsstnnp” ,个中“tnnp”取固定值“032+”,即默认体系为北京时光
//ScheduleTime 16字节 text 短消息准时发送的时光,假如为空,表示急速发送该短消息。时光内容为16个字符,格局为“yymmddhhmmsstnnp” ,个中“tnnp”取固定值“032+”,即默认体系为北京时光
//ReportFlag 1字节 int 状况申报标记0-该条消息只有最后掉足时要返回状况申报1-该条消息无论最后是否成功都要返回状况申报2-该条消息不须要返回状况申报3-该条消息仅携带包月计费信息,不下发给用户,要返回状况申报其它-保存缺省设置为0
//TP_pid 1字节 int GSM协定类型。具体解释请参考GSM03.40中的9.2.3.9
//TP_udhi 1字节 int GSM协定类型。具体解释请参考GSM03.40中的9.2.3.23,仅应用1位,右对齐
//MessageCoding 1字节 int 短消息的编码格局。0:纯ASCII字符串3: