|
比如创建一个TCP回调:
- nx_tcp_socket_receive_notify(&TCPSocket[i],
- my_receive_notify);
复制代码
回调函数处理:
- /*
- *********************************************************************************************************
- * 函 数 名: NetXTest
- * 功能说明: TCPnet应用
- * 形 参: 无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- void my_receive_notify(NX_TCP_SOCKET *socket_ptr)
- {
- UINT status;
- UINT ret;
- ULONG socket_state;
- UINT old_priority;
- int i;
- NX_PACKET *RecPacket;
- NX_PACKET *TraPacket;
- ULONG bytes_read;
- static uint32_t count = 0;
-
- ULONG peer_ip_address;
- ULONG peer_port;
- uint8_t sendbuf[20];
-
- ret = nx_tcp_socket_receive(socket_ptr, /* TCP Socket控制块 */
- &RecPacket, /* 接收到的数据包 */
- 0); /* 永久等待 */
-
- /* 获取客户端的IP地址和端口 */
- nx_tcp_socket_peer_info_get(socket_ptr, /* TCP Socket控制块 */
- &peer_ip_address, /* 远程IP地址 */
- &peer_port); /* 远程端口号 */
-
- /* 获取客户端发来的数据 */
- nx_packet_data_retrieve(RecPacket, /* 接收到的数据包 */
- data_buffer, /* 解析出数据 */
- &bytes_read); /* 数据大小 */
- /* 打印接收到数据 */
- PRINT_DATA(peer_ip_address, (unsigned int)peer_port, data_buffer);
-
- nx_packet_release(RecPacket);
-
- /* 申请发送数据包 */
- ret = nx_packet_allocate(&pool_0, &TraPacket, NX_TCP_PACKET, 0);
- if (ret)
- {
- Error_Handler(__FILE__, __LINE__);
- }
- sprintf((char *)sendbuf, "sendbuf = %d\r\n", count++);
-
- /*将要发送的数据附加到TraPacket */
- ret = nx_packet_data_append(TraPacket, (VOID *)sendbuf, strlen((char *)sendbuf), &pool_0, 0);
- if (ret)
- {
- Error_Handler(__FILE__, __LINE__);
- }
- /* 发送数据,注意发送后,此函数会释放数据包 */
- ret = nx_tcp_socket_send(socket_ptr,
- TraPacket,
- 0);
-
- if (ret)
- {
- Error_Handler(__FILE__, __LINE__);
- }
-
- }
复制代码
|
|