1 Star 0 Fork 5

Dragon/w800-liteos-sdk

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
wm_sck_server_demo.c 3.71 KB
一键复制 编辑 原始数据 按行查看 历史
nicholas3388 提交于 2022-07-04 18:08 . first push
#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);
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/hbu-dragon/w800-liteos-sdk.git
git@gitee.com:hbu-dragon/w800-liteos-sdk.git
hbu-dragon
w800-liteos-sdk
w800-liteos-sdk
master

搜索帮助