描述:改自realtouch的代码,用作服务器端,使用tcpip通信,上位机连接一段时间后,会自动断开,无法收发数据,上位机报错the network connection was closed by the peer,下位机报错-12或者-13,此时可以ping通。这是什么原因?
服务器端代码如下:
static void tcpserv_thread_entry(void* parameter)
{
char *recv_data_buf,*send_data_buf; //
rt_uint32_t sin_size;
int sock, connected;
struct sockaddr_in server_addr, client_addr;
rt_uint16_t received_len,send_len;
recv_data_buf = (char *)rt_malloc(RECV_BUF_SIZE); //
send_data_buf = (char *)rt_malloc(SEND_BUF_SIZE);
if (NULL == recv_data_buf || NULL == send_data_buf)
{
rt_kprintf("No memory
");
goto TCP_SERVER_QUIT;
}
rt_memset(recv_data_buf,0x0,RECV_BUF_SIZE);
rt_memset(send_data_buf,0x0,SEND_BUF_SIZE);
//
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
//
rt_kprintf("Socket error
");
goto TCP_SERVER_QUIT;
}
//
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT); //
server_addr.sin_addr.s_addr = INADDR_ANY;
rt_memset(&(server_addr.sin_zero),8, sizeof(server_addr.sin_zero));
//
if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
{
//
rt_kprintf("Unable to bind
");
goto TCP_SERVER_QUIT;
}
//
if (listen(sock, 5) == -1)
{
rt_kprintf("Listen error
");
goto TCP_SERVER_QUIT;
}
rt_kprintf("TCPServer Waiting for client on port %d...
",SERVER_PORT);
sin_size = sizeof(struct sockaddr_in);
while(1)
{
//
connected = accept(sock, (struct sockaddr *)&client_addr, &sin_size);
//
received_len = recv(connected,recv_data_buf, RECV_BUF_SIZE, 0);
if (received_len > 0)
{
//ATE_LinkComing(ATE_LINK_ETH);
//recv_data_buf[received_len] = '