zoukankan      html  css  js  c++  java
  • 4.4 TCP服务器通信

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

    在开发板连网成功后,创建TCP 服务连接。

    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
    ",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, '', sizeof(server_addr.sin_zero));
    
    	if (bind(server_fd, (struct sockaddr *) &server_addr,
         	sizeof(server_addr)) != 0)
    	{
        	printf("bind fail, errno:%d
    ",errno);
    		break;
     	}
    	
    	if (listen(server_fd, 1) != 0)
    	{
        	printf("listen fail,errno:%d
    ",errno);
        	break;
    	}
    
    	printf("listen port %d
    ", port);
    	sin_size = sizeof(client_addr);
    	new_fd = accept(server_fd, (struct sockaddr *) &client_addr,
                       &sin_size);
        printf("accept newfd = %d
    ",new_fd);
    		
        if (new_fd < 0)
        {
              printf("accept fail,errno:%d
    ",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
    ");
    			break;
            }
    		else if(ret < 0)
    		{
    			printf("receive fail errno:%d
    ",errno);
    			break;
    		}
            else
            {     
            	 sock_rx[ret] = 0;
    			 printf("
    Receive %d bytes from %s
    ", ret, inet_ntoa(client_addr.sin_addr.s_addr));
    			 printf("%s
    ",sock_rx);
    			 ret = send(new_fd, sock_tx, strlen(sock_tx), 0);
    			 if (ret < 0)
    			 {
    			 	printf("Error occured during sending,errno:%d
    ",errno);
    				break;
    			 }
            }
     	}
    	if(new_fd != -1)
    	{
    		printf("shutting down socket and restaring...
    ");
    		shutdown(new_fd,0);
    		closesocket(new_fd);
    	}
    }
    return 0;
    

    }
    程序编译并下载到开发板,串口输入指令指定路由器名称,密码,TCP端口,如:t-server("@snail","ss559550",8080,),可以看到连接网络后分配到开发板 tcp服务器的ip地址192.168.2.107。

    在 PC 上建立一个 tcp client,设置好要连接的TCP服务器IP,端口,即可连接成功。

  • 相关阅读:
    2331: [SCOI2011]地板 插头DP
    APIO2018 铜滚记
    2827: 千山鸟飞绝 非旋treap
    3682: Phorni 后缀平衡树 线段树
    4712: 洪水 基于链分治的动态DP
    20180507小测
    4923: [Lydsy1706月赛]K小值查询 平衡树 非旋转Treap
    5312: 冒险 线段树 复杂度分析
    5210: 最大连通子块和 动态DP 树链剖分
    4513: [Sdoi2016]储能表 数位DP
  • 原文地址:https://www.cnblogs.com/doiting/p/14109103.html
Copyright © 2011-2022 走看看