UniMedia IDE集成環(huán)境訪問(wèn)網(wǎng)絡(luò)服務(wù)器實(shí)例解析 
                  
                   2009/05/27
                  1.目標(biāo)功能
                  
                    在IDE中實(shí)現(xiàn)Socket客戶端,向TCP/IP服務(wù)端發(fā)送數(shù)據(jù)串。
                  
                  2.數(shù)據(jù)格式說(shuō)明:
                  
                    如果外部應(yīng)用采用NETX控件與IDE進(jìn)行通信,則以MSG對(duì)象格式進(jìn)行數(shù)據(jù)傳遞,不需要進(jìn)行格式拆分。
                  
                  MSG對(duì)象格式示例:
                  MSG userMsg
                  userMsg.UserMsgType = 8
                  userMsg.Int0 = 0
                  userMsg.Int1 = 1
                  userMsg.Int2 = 2
                  userMsg.Int3 = 3
                  userMsg.Int4 = 4
                  userMsg.Int5 = 5
                  userMsg.Int6 = 6
                  userMsg.Int7 = 7
                  userMsg.Int8 = 8
                  userMsg.Int9 = 9
                  userMsg.Str0 = “a”
                  userMsg.Str1 = “b”
                  userMsg.Str2 = “c”
                  userMsg.Str3 = “d”
                  userMsg.Str4 = “e”
                  userMsg.Str5 = “f”
                  userMsg.Str6 = “g”
                  userMsg.Str7 = “h”
                  userMsg.Str8 = “i”
                  userMsg.Str9 = “j”
                  
                    如果與外部之間通過(guò)SOCKET直接進(jìn)行碼流通信,以上面的對(duì)象值為例,具體消息格式舉例說(shuō)明如下,碼流格式為ASCII碼: 
                  
                   
                  
                   其中:
                    MID是消息ID(正整數(shù)) 
                  4199
                  1-10等字段字用戶填上述固定值即可;
                  StringListSize 字段的值為10個(gè)有效字符數(shù), 其它字段可根據(jù)業(yè)務(wù)需要填寫(xiě);
                  說(shuō)明:10個(gè)Str字符的總長(zhǎng)不能大于1024個(gè)字節(jié),單個(gè)字段的長(zhǎng)度不能大于1024個(gè)字節(jié),整個(gè)消息包不能大于2048個(gè)字節(jié)。
                  
                  NETX使用
                  如果不想自己拆分?jǐn)?shù)據(jù),可直接使用NetX控件。
                  
                  4.2.4.3 IDE腳本實(shí)例
                  ///////////////////////////////////////////////////////////////
                  #define TCP_SERVER_IP "127.0.0.1"
                  #define TCP_SERVER_PORT 14445
                  SCPMANAGER g_SCPManager
                  
                  //主函數(shù)
                  sub main(LIST& cpl)
                  {
                  CONN l_CONNVar
                  MSG l_MSGSendVar
                  String l_stringIpOfClientVar
                  Int l_intPortClientVar,l_intConnIDClientVar,l_intRetVar
                  Bool l_boolConnectStatusVar
                  
                  //初始化IP和PORT
                  l_stringIpOfClientVar = TCP_SERVER_IP
                  l_intPortClientVar = TCP_SERVER_PORT
                  
                  //發(fā)起TCP Client端連接
                  l_CONNVar.OpenConn(PT_TCP, CT_CLIENT, l_stringIpOfClientVar,
                  l_intPortClientVar, l_intConnIDClientVar, 
                  false, l_intRetVar)
                  //等待2秒,等待底層網(wǎng)絡(luò)連接
                  Wait(2000)
                  //設(shè)置網(wǎng)絡(luò)對(duì)象具備自動(dòng)重連特性
                  l_CONNVar.SetAutoReconnect(true, l_intRetVar)
                  //注冊(cè)數(shù)據(jù)到達(dá)事件
                  EventMap(INF_SYS_CONNDATAINCOME, OnConnDataIncome, 0)
                  
                  while(true)
                  {
                  //取網(wǎng)絡(luò)連接狀態(tài)
                  l_CONNVar.GetStatus(l_boolConnectStatusVar, l_intRetVar)
                  //分析是否已經(jīng)建立網(wǎng)絡(luò)連接,建立則發(fā)送數(shù)據(jù)
                  if (l_boolConnectStatusVar == true)
                  {
                  //初始化發(fā)送數(shù)據(jù)
                  l_MSGSendVar.UserMsgType = 8
                  l_MSGSendVar.Int0 = 10
                  l_MSGSendVar.Str0 = "aaa"
                  Log(DBG,"發(fā)送數(shù)據(jù)..." )
                  
                  //發(fā)送數(shù)據(jù)
                  l_CONNVar.SendMsg(l_MSGSendVar, l_intRetVar)
                  //TODO 發(fā)送數(shù)據(jù)后結(jié)束,為驗(yàn)證數(shù)據(jù)接收,可以考慮不結(jié)束
                  break
                  }
                  //如果連接沒(méi)有成功,則過(guò)一會(huì)再進(jìn)行查詢
                  Wait(5000)
                  }// end of while
                  
                  //斷開(kāi)網(wǎng)絡(luò)連接,關(guān)閉對(duì)象
                  l_CONNVar.CloseConn()
                  }
                  
                  //接收網(wǎng)絡(luò)數(shù)據(jù)事件回調(diào)函數(shù)
                  sub OnConnDataIncome(int tag, CONN& conn)
                  {
                  int l_intRetVar
                  bool l_boolHasMsgVar, l_boolConnectStatusVar
                  MSG l_MSGReadVar
                  
                  Log(DBG,"有網(wǎng)絡(luò)數(shù)據(jù)到達(dá)事件!")
                  //可能有多條消息,進(jìn)行循環(huán)讀取接收
                  while(true)
                  {
                  //開(kāi)始讀消息...
                  conn.ReadMsg(l_MSGReadVar, l_boolHasMsgVar, l_intRetVar)
                  if((l_intRetVar == RET_SUCC) && (l_boolHasMsgVar == true))
                  {
                  Log(DBG,"(TCP CLIENT READ ,(RET=",l_intRetVar,
                  ",CONNID=", conn.ConnID,
                  ",Type=", l_MSGReadVar.UserMsgType,
                  ",Int0=", l_MSGReadVar.Int0,
                  ",Str0=", l_MSGReadVar.Str0,")")
                  }
                  else
                  {
                  //沒(méi)有數(shù)據(jù)或錯(cuò)誤
                  return
                  }
                  } //end of While read
                  }
                  
                  NEX控件說(shuō)明:
                  
                    NETX 是以ActiveX控件以接口方式被外部應(yīng)用程序調(diào)用。對(duì)高層應(yīng)用程序而言,直接利用控件,可以在不了解UniMedia內(nèi)部協(xié)議的前提下,實(shí)現(xiàn)與IDE的網(wǎng)絡(luò)通信,具體通信內(nèi)容是上述定義的MSG對(duì)象。詳細(xì)接口說(shuō)明可以參考《接口及使用手冊(cè)-NETX.PDF》 
                  CTI論壇報(bào)道
                  
相關(guān)鏈接: