BREW 中的socket编程

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

对基于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;

          }

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wireless_com/archive/2010/09/29/5914099.aspx

目录
相关文章
|
8天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
8天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
13天前
|
网络协议 程序员 Python
pythonTCP客户端编程创建Socket对象
【4月更文挑战第6天】本教程介绍了TCP客户端如何创建Socket对象。Socket作为网络通信的基础单元,包含协议、IP地址和端口等信息。在TCP/IP中,Socket分为流式(TCP)、数据报(UDP)和原始套接字。以Python为例,创建TCP Socket对象需调用`socket.socket(AF_INET, SOCK_STREAM)`。为确保健壮性,应使用异常处理处理可能的`socket.error`。学习本教程将帮助你掌握TCP客户端创建Socket对象的技能。
|
1月前
|
网络协议 安全 API
计算机网络之Socket编程
计算机网络之Socket编程
|
2月前
|
网络协议 安全 开发者
Python 中的 Socket 编程
Python 中的 Socket 编程
44 4
|
3月前
socket编程之回声服务器函数的陷阱
由connect函数使用不当导致的小错误 话不多说先看代码:
25 0
|
3月前
|
API C++
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(1)
前言   本文旨在学习socket网络编程这一块的内容,epoll是重中之重,后续文章写reactor模型是建立在epoll之上的。
34 0
|
3月前
|
监控 安全 Linux
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(3)
高并发服务器模型-poll poll介绍   poll跟select类似, 监控多路IO, 但poll不能跨平台。其实poll就是把select三个文件描述符集合变成一个集合了。
35 0
|
7天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
11天前
|
Python
Python网络编程基础(Socket编程)UDP服务器编程
【4月更文挑战第8天】Python UDP服务器编程使用socket库创建UDP套接字,绑定到特定地址(如localhost:8000),通过`recvfrom`接收客户端数据报,显示数据长度、地址和内容。无连接的UDP协议使得服务器无法主动发送数据,通常需应用层实现请求-响应机制。当完成时,用`close`关闭套接字。