代码拉取完成,页面将自动刷新
同步操作将从 nicholas3388/w800-liteos-sdk 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "wm_include.h"
#include <string.h>
#include "wm_demo.h"
#include "lwip/errno.h"
#define DEMO_SOCK_BUF_SIZE 512
static const char *sock_tx = "message from server";
int new_fd = -1;
int server_fd = -1;
static int create_socket_server(int port);
static void s_con_net_status_changed_event(u8 status )
{
switch(status)
{
case NETIF_IP_NET_UP:
{
struct tls_ethif * tmpethif = tls_netif_get_ethif();
#if TLS_CONFIG_IPV4
print_ipaddr(&tmpethif->ip_addr);
#if TLS_CONFIG_IPV6
print_ipaddr(&tmpethif->ip6_addr[0]);
print_ipaddr(&tmpethif->ip6_addr[1]);
print_ipaddr(&tmpethif->ip6_addr[2]);
#endif
#else
printf("net up ==> ip = %d.%d.%d.%d\n",ip4_addr1(&tmpethif->ip_addr.addr),ip4_addr2(&tmpethif->ip_addr.addr),
ip4_addr3(&tmpethif->ip_addr.addr),ip4_addr4(&tmpethif->ip_addr.addr));
#endif
}
break;
case NETIF_WIFI_JOIN_FAILED:
break;
case NETIF_WIFI_JOIN_SUCCESS:
break;
case NETIF_WIFI_DISCONNECTED:
printf("network disconnection\n");
closesocket(new_fd);
closesocket(server_fd);
new_fd = -1;
break;
default:
break;
}
}
static int s_connect_wifi(char *ssid, char *pwd)
{
if (!ssid)
{
return WM_FAILED;
}
printf("\nssid:%s\n", ssid);
printf("password=%s\n",pwd);
tls_netif_add_status_event(s_con_net_status_changed_event);
tls_wifi_connect((u8 *)ssid, strlen(ssid), (u8 *)pwd, strlen(pwd));
return 0;
}
static int create_socket_server(int port)
{
char sock_rx[DEMO_SOCK_BUF_SIZE] = {0};
struct sockaddr_in server_addr; // server address information
struct sockaddr_in client_addr; // connector's address information
socklen_t sin_size;
int ret;
while(1)
{
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("create socket fail,errno :%d\n",errno);
break;
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr.s_addr = ((u32) 0x00000000UL);
memset(server_addr.sin_zero, '\0', sizeof(server_addr.sin_zero));
if (bind(server_fd, (struct sockaddr *) &server_addr,
sizeof(server_addr)) != 0)
{
printf("bind fail, errno:%d\n",errno);
break;
}
if (listen(server_fd, 1) != 0)
{
printf("listen fail,errno:%d\n",errno);
break;
}
printf("listen port %d\n", port);
sin_size = sizeof(client_addr);
new_fd = accept(server_fd, (struct sockaddr *) &client_addr,
&sin_size);
printf("accept newfd = %d\n",new_fd);
if (new_fd < 0)
{
printf("accept fail,errno:%d\n",errno);
break;
}
while (1)
{
memset(sock_rx, 0, DEMO_SOCK_BUF_SIZE);
ret = recv(new_fd, sock_rx, sizeof(sock_rx)-1, 0);
if(ret == 0)
{
printf("connection disconnect\n");
break;
}
else if(ret < 0)
{
printf("receive fail errno:%d\n",errno);
break;
}
else
{
sock_rx[ret] = 0;
printf("\nReceive %d bytes from %s\n", ret, inet_ntoa(client_addr.sin_addr.s_addr));
printf("%s\n",sock_rx);
ret = send(new_fd, sock_tx, strlen(sock_tx), 0);
if (ret < 0)
{
printf("Error occured during sending,errno:%d\n",errno);
break;
}
}
}
if(new_fd != -1)
{
printf("shutting down socket and restaring...\n");
shutdown(new_fd,0);
closesocket(new_fd);
}
}
return 0;
}
void demo_socket_server(char *ssid,char *pwd, int port)
{
struct tls_ethif * ethif;
s_connect_wifi(ssid, pwd);
while(1)
{
tls_os_time_delay(1);
ethif = tls_netif_get_ethif();
if(ethif->status)
break;
}
create_socket_server(port);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。