tcp连接收发数据与请求
定义
int sockfd;
连接socket,tcp方式;断开socket
static void socket_client_connect()
{
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("Error in socket\r\n");
return;
}
struct sockaddr_in dest;
memset(&dest, 0, sizeof(dest));
dest.sin_family = AF_INET;
dest.sin_port = htons(PORT);
dest.sin_addr.s_addr = inet_addr("172.17.254.20");
uint32_t address = dest.sin_addr.s_addr;
char *ip = inet_ntoa(address);
printf("Server ip Address : %s\r\n", ip);
if (connect(sockfd,
(struct sockaddr *)&dest,
sizeof(dest)) != 0)
{
printf("Error in connect\r\n");
return;
}
else
{
printf("alreadly connect with %s\r\n", ip);
}
return;
}
static void socket_client_disconnect()
{
close(sockfd);
}
下载数据
void httpdownloadrequest()
{
uint8_t *recv_buffer;
char buffer[MAXBUF];
memset(buffer, 0, MAXBUF);
char wbuf[] = "GET /test.png HTTP/1.1\r\nAccept: */*\r\n\r\n";
write(sockfd, wbuf, sizeof(wbuf) - 1);
int ret = 0;
int total = 0;
int debug_counter = 0;
uint32_t ticks_start, ticks_end, time_consumed;
ticks_start = xTaskGetTickCount();
recv_buffer = pvPortMalloc(BUFFER_SIZE);
if (NULL == recv_buffer)
{
goto out;
}
while (1)
{
ret = read(sockfd, recv_buffer, BUFFER_SIZE);
if (ret == 0)
{
ticks_end = xTaskGetTickCount();
time_consumed = ((uint32_t)(((int32_t)ticks_end) - ((int32_t)ticks_start)));
printf("Download comlete, total time %u ms, speed %u Kbps\r\n-----------------------------------------------------------\r\n",
(unsigned int)time_consumed,
(unsigned int)(total / time_consumed * 8 / 1000));
break;
}
else if (ret < 0)
{
printf("ret = %d, err = %d\n\r", ret, errno);
break;
}
else
{
total += ret;
if (0 == ((debug_counter++) & 0xFF))
{
printf("total = %d, ret = %d\n\r", total, ret);
}
}
}
vPortFree(recv_buffer);
out:
close(sockfd);
}
发送数据
void httpsendrequest()
{
char wbuf[] = "1";
write(sockfd, wbuf, sizeof(wbuf) - 1);
vTaskDelay(1000);
}
TimerHandle_t timerHandle01;
void httpsenddemo()
{
timerHandle01 = xTimerCreate((const char *)"AutoReloadTimer",
(TickType_t)2000,
(UBaseType_t)pdTRUE,
(void *)1,
(TimerCallbackFunction_t)httpsendrequest);
if (timerHandle01 == NULL)
{
printf("timer create fail\r\n");
}
xTimerStart(timerHandle01, 0);
}
void stop_send()
{
xTimerStop(timerHandle01, 0);
close(sockfd);
}
连接WiFi
static void connectleapfive()
{
if (linkcount == 0)
{
wifi_sta_connect("LeapFive_SD", "leapfive");
vTaskDelay(7000);
linkcount++;
}
}