zoukankan      html  css  js  c++  java
  • 4.3 TCP客户端通信

    本节我们使用开发板建立一个 tcp 客户端,再去连接指定地址和端口的 tcp 服务端并进行数据通信。打开宏定义 DEMO_SOCKET_CLIENT_SERVER、DEMO_CONNECT_NET;

    在开发板连网成功后,创建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 ",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
    ",errno);
    		return -1;
    	}
    	
    	if (connect(socket_num, (struct sockaddr *)&pin, sizeof(struct sockaddr)) != 0)
    	{
        	printf("connect fail errno:%d
    ",errno);
    	}
    	else
    	{
    		printf("connect success
    ");
    	}
    	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
    ",errno);
    			break;
    		}
    		
            ret = recv(socket_num, sock_rx, sizeof(sock_rx)-1, 0);	
    		if(ret < 0)
    		{
    			printf("Receive failed, errno:%d
    ",errno);
    			break;
    		}
    		else
    		{
    			sock_rx[ret] = 0;
                printf("
    Receive %d bytes from %s
    ",ret,ip);	
    			printf("%s
    ",sock_rx);
    		}
    		tls_os_time_delay(2);
    	}
    	if(socket_num != -1)
    	{
    		printf("shutting down socket and restaring...
    ");
    		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")

    连接成功,网络调试助手会收到消息。

  • 相关阅读:
    (1)quartz集群调度机制调研及源码分析---转载
    转《深入理解Java虚拟机》学习笔记之最后总结
    liux vim命令
    http请求返回响应码的意思
    java中时间格式yyyyMMddHHmmss的大小写问题
    并发容器之CopyOnWriteArrayList
    快速失败(fail-fast)和安全失败(fail-safe)的区别
    关于java集合类HashMap的理解
    权限管理系统(一):权限系统与RBAC模型概述
    一个简单的实现不同权限的用户登录后看到不同的菜单设计的数据库表清单
  • 原文地址:https://www.cnblogs.com/doiting/p/14109064.html
Copyright © 2011-2022 走看看