这个是测试的代码
[C] 纯文本查看 复制代码 static VOID tcp_listen_callback(NX_TCP_SOCKET *socket_ptr, UINT port)
{
tx_semaphore_put(&eht_converter_sem);
}
void thread_eth_converter(ULONG thread_input)
{
UINT status;
NX_PACKET * data_packet;
ULONG source_ip_address;
UINT source_port;
ULONG bytes_read;
status = nx_tcp_socket_create(&ip_0, ð_converter_sockets,
"eth_converter_socket",
NX_IP_NORMAL,
NX_FRAGMENT_OKAY,
NX_IP_TIME_TO_LIVE,
sizeof(data_buffer),
NX_NULL,
NX_NULL);
if (status) {
}
status = nx_tcp_server_socket_listen(&ip_0, ETH_CONVERTER_PORT, ð_converter_sockets, 1, tcp_listen_callback)<<2;
if (status) {
}
tx_semaphore_get(&eht_converter_sem, TX_WAIT_FOREVER);
nx_tcp_server_socket_accept(ð_converter_sockets, TX_WAIT_FOREVER);
while (1) {
TX_MEMSET(data_buffer, '\0', sizeof(data_buffer));
/* 获取socket状态 */
nx_tcp_socket_info_get(ð_converter_sockets, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &socket_state, NULL, NULL, NULL);
/* 如果连接还没有建立,继续接受新连接,成功的话开启接收数据 */
if(socket_state != NX_TCP_ESTABLISHED)
{
status = nx_tcp_server_socket_accept(ð_converter_sockets, NX_IP_PERIODIC_RATE);
}
if(status == NX_SUCCESS)
{
/* 接收TCP客户端发的TCP数据包 */
status = nx_tcp_socket_receive(ð_converter_sockets, &data_packet, NX_WAIT_FOREVER);
if (status == NX_SUCCESS)
{
/* 获取客户端的IP地址和端口 */
nx_udp_source_extract(data_packet, &source_ip_address, &source_port);
/* 获取客户端发来的数据 */
nx_packet_data_retrieve(data_packet, data_buffer, &bytes_read);
/* 打印接收到数据 */
/* 立即将接收到的数据发送回去 */
status = nx_tcp_socket_send(ð_converter_sockets, data_packet, NX_IP_PERIODIC_RATE);
if (status == NX_SUCCESS)
{
}
/* 释放数据包 */
nx_packet_release(data_packet);
}
else
{
/* 断开连接,重新监听 */
nx_tcp_socket_disconnect(ð_converter_sockets, NX_WAIT_FOREVER);
nx_tcp_server_socket_unaccept(ð_converter_sockets);
nx_tcp_server_socket_relisten(&ip_0, ETH_CONVERTER_PORT, ð_converter_sockets);
}
}
else
{
/* 处于空闲状态 */
}
}
sleep_ms(1);
}
|