TCPServer
#include "esp_common.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "lwip/sockets.h"
#include "lwip/dns.h"
#include "lwip/netdb.h"
#include "espressif/espconn.h"
#include "espressif/airkiss.h"
#include "tcpserver.h"
#define SERVERADDR "192.168.0.106"
#define SERVERPORT 6008
void ATaskTcpServer(void *pvParameters)
{
int iVariableExample = 0;
int fd = -1;
int cfd = -1;
int NetTimerOut = 5000;
int ret;
struct sockaddr_in serverAddr;
struct sockaddr ClientAddr;
socklen_t ClientAddrlen = sizeof(struct sockaddr);
char Tcpmsg[48];
STATION_STATUS StaStatus;
//等待连接wifi
do
{
StaStatus = wifi_station_get_connect_status();
vTaskDelay(100);
} while (StaStatus != STATION_GOT_IP);
//建立socket
fd = socket(PF_INET, SOCK_STREAM, 0);
if (fd == -1)
{
printf("get socket fail!\n");
vTaskDelete(NULL);
}
//设置socket超时时间
setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &NetTimerOut, sizeof(int));
//设置socket信息,ip,端口号
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = INADDR_ANY;
serverAddr.sin_port = htons(SERVERPORT);
serverAddr.sin_len = sizeof(serverAddr);
//绑定ip信息
if(bind(fd, (struct sockaddr *)&serverAddr, serverAddr.sin_len) != 0)
{
printf("bind socket fail!\n");
vTaskDelete(NULL);
return;
}
//最大连接数5
if(listen(fd, 5)!=0)
{
printf("listen socket fail!\n");
vTaskDelete(NULL);
return;
}
for (;;)
{
//等待客户端连接
cfd = accept(fd, &ClientAddr, &ClientAddrlen);
if(cfd != -1)
{
ret = recv(cfd, Tcpmsg, 48, 0);
if (ret > 0)
{
printf("TcpClient:%s\n", Tcpmsg);
send(cfd, "I am TcpServer", sizeof("I am TcpServer"), 0);
}
else
{
printf("TcpClient data is no!\n");
/* code */
}
}
//关闭连接
close(cfd);
}
vTaskDelete(NULL);
}
void tcdServer_int(void)
{
xTaskCreate(ATaskTcpServer, "tcpServer", 256, NULL, 4, NULL);
}
测试结果