1. 程式人生 > 實用技巧 >W800 建立TCP客戶端通訊

W800 建立TCP客戶端通訊

本節我們使用W800建立一個 tcp 客戶端,再去連線指定地址和埠的 tcp 服務端並進行資料通訊。開啟巨集定義 DEMO_SOCKET_CLIENT_SERVER、DEMO_CONNECT_NET;

在w800連網成功後,建立TCP連線。
int demo_socket_client(char *ssid, char *pwd,int port,char *ip)
{
struct tls_ethif * ethif;
c_connect_wifi(ssid,pwd);
while(1)
{
tls_os_time_delay(1);
ethif = tls_netif_get_ethif();
if(ethif->status)
break;
}
socket_client_connect(port,ip);
return 0;
}
建立一個socket連線,連線指定目標的TCP伺服器。
static int socket_client_connect(int port, char *ip)
{
int ret;
char sock_rx[DEMO_SOCK_BUF_SIZE] = {0};
struct sockaddr_in pin;
printf("port:%d,ip:%s\n",port,ip);
while(1)
{
memset(&pin, 0, sizeof(struct sockaddr));
pin.sin_family=AF_INET;

	pin.sin_addr.s_addr = ipaddr_addr(ip);
	pin.sin_port=htons(port);
	if((socket_num = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0)
	{
		printf("creat socket fail, errno:%d\n",errno);
		return -1;
	}
	
	if (connect(socket_num, (struct sockaddr *)&pin, sizeof(struct sockaddr)) != 0)
	{
    	printf("connect fail errno:%d\n",errno);
	}
	else
	{
		printf("connect success\n");
	}
	while(1)
	{
		tls_os_time_delay(1000);
		ret = send(socket_num, sock_tx, strlen(sock_tx), 0);
		if(ret < 0)
		{
			printf("Error occured during sending, errno:%d\n",errno);
			break;
		}
		
        ret = recv(socket_num, sock_rx, sizeof(sock_rx)-1, 0);	
		if(ret < 0)
		{
			printf("Receive failed, errno:%d\n",errno);
			break;
		}
		else
		{
			sock_rx[ret] = 0;
            printf("\nReceive %d bytes from %s\n",ret,ip);	
			printf("%s\n",sock_rx);
		}
		tls_os_time_delay(2);
	}
	if(socket_num != -1)
	{
		printf("shutting down socket and restaring...\n");
		shutdown(socket_num,0);
		closesocket(socket_num);
		socket_num = -1;
	}
}

}
程式編譯並下載到開發板,在 PC 上建立一個 tcp server,設定監聽埠為 8080,IP地址為電腦本機的IP。

通過串列埠指令指定wifi的名稱和密碼,指定TCP伺服器的IP地址和埠號。
如:t-client("@snail","ss559550",8080,"192.168.2.103")

連線成功,網路除錯助手會收到訊息。