《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之73---BREW 中的socket编程-阿里云开发者社区

开发者社区> abel_cao> 正文

《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之73---BREW 中的socket编程

简介: 版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
+关注继续查看
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/5914099

对基于UDP的网络通信而言,首先需要创建ISocket接口,

ISocket *mySocket;

mySocket = INETMGR_OpenSocket(pMe->pINetMgr, AEE_SOCK_STREAM);

if(!mySocket) {

                   DBGPRINTF(“Error value: %x”, INETMGR_GetLastError(pMe->pINetMgr));

}

然后,就可以发送数据包了

Void SendPacket(App* pMe){

    retVal = ISOCKET_SendTo(pMe->pISocket, (byte*)"HelloWorld",

                                                   sizeof("HelloWorld"), 0, pMe->inAddr, HTONS(pMe->port));

      switch(retVal) {

         case AEE_NET_WOULDBLOCK:

              ISOCKET_Writeable(pMe->pISocket, (PFNNOTIFY)SendPacket, pMe);

              return;

          // Some sort of network error

         case AEE_NET_ERROR:

              DBGPRINTF("Network Error");

              break;

         default:

             if(retVal == sizeof(“HelloWorld”))

                 //Success

             else

                 // Some other error

      }

}

在接收数据之前,先要绑定客户端的端口。

static void SetUpNetwork(CVocApp* pMe) {

   int retVal;

   // Bind to the correct port and ip address

   retVal = ISOCKET_Bind(pMe->pIRecvSocket, HTONL(AEE_BREW_LOOPBACK), HTONS(PORT));

   // Check the return value of ISOCKET_Bind() and display necessary message

   switch(retVal) {

   // Socket not ready yet

   case AEE_NET_WOULDBLOCK:

      ISOCKET_Writeable(pMe->pIRecvSocket, (PFNNOTIFY)SetUpNetwork, pMe);

      break;

   // Succesfully connected

   case AEE_NET_SUCCESS:

      ISOCKET_Readable(pMe->pIRecvSocket, (PFNNOTIFY)ReadInData, pMe);

      break;

   // Something went wrong, print error to logger

   default:

      DBGPRINTF("retVal %d", ISOCKET_GetLastError(pMe->pIRecvSocket));

      break;

   }

}

然后,就可以通过UDP接收数据了,

static void ReadInData(App* pMe) {

   int ret;

   // When data is ready, receive data

   ret = ISOCKET_RecvFrom(pMe->pIRecvSocket, (void*)&pMe->indata, sizeof(pMe->indata), ISOCKET_FLAG_SENDTO_WAKEUP|ISOCKET_FLAG_SENDTO_URGENT, NULL, NULL);

   // Data integrity checks

   if(ret < 0) {

       DBGPRINTF("error %d", ISOCKET_GetLastError(pMe->pIRecvSocket));

   }

   // Have socket continue to listen

   ISOCKET_Readable(pMe->pIRecvSocket, (PFNNOTIFY)ReadInData, pMe);

}

通信完毕,需要使用ISOCKET_Release()来释放接口对象。

            对基于TCP的网络通信而言,同样,首先需要创建ISocket接口,

                        ISocket *mySocket;

                                mySocket = INETMGR_OpenSocket(pMe->pINetMgr, AEE_SOCK_STREAM);

                                if(!mySocket) {

                                   DBGPRINTF(“Error value: %x”, INETMGR_GetLastError(pMe->pINetMgr));

                                }

然后,建立数据连接,并监测连接的网络状态,如果连接成功则发送数据

ISOCKET_Connect(pMe->pISocket,HTONL(myIP),HTONS(myPort),(PFNCONNECTCB)ConnectionMade, pMe);

                static void ConnectionMade(myApp* pMe, int error) {

         //Check error code

         switch(error) {

         case AEE_NET_ETIMEDOUT:

             // Connection timed out

             break;

          case AEE_NET_SUCCESS:

             // Send Some data

if(AEE_NET_WOULDBLOCK==ISOCKET_Write(pMe->pISocket,(byte*)"helloworld", sizeof("helloworld")) {

                ISOCKET_Writeable(pMe->pISocket, (PFNNOTIFY) SendDataCB, pMe);

             }

             break;

          default:

              // Some other Network error

              break;

          }

     }

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《计算机科学与工程导论:基于IoT和机器人的可视化编程实践方法第2版》一1.1.1 计算机科学和工程的课程体系
本节书摘来华章计算机《计算机科学与工程导论:基于IoT和机器人的可视化编程实践方法第2版》一书中的第1章 ,第1.1.1节,陈以农 陈文智 韩德强 著 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
972 0
《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之84——BREW中的应用加载机制
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
241 0
《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之82——BREW应用间通信之共享文件
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
565 0
《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之78——BREW手机中的事件处理
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
499 0
《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之79——BREW应用间通信之事件传递
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
481 0
《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之80——BREW应用间通信之回调通知
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
420 0
《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之81——BREW应用间通信之共享内存
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
429 0
+关注
abel_cao
半吊子全栈工匠一枚
436
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载