示例#1
0
int Agent_cloud_process(void)
{
	EdpPacket* connect_pkg = NULL;
	int ret;
	unsigned char failedcnt = 0;

	cloud_conn_status.conn_status = SOCK_DONE;

	#ifndef   Devid_RestFul
		AGAIN:    
			/* 向Onenet服务器发送EDP连接报文 */
			connect_pkg = PacketConnect1((char*)SRC_DEVID, (char*)CLOUD_API_KEY);
		
			/* dump package data */
			log_info("Packet connect data(len:%d):\n", connect_pkg->_write_pos);
			dump_hex(connect_pkg->_data, connect_pkg->_write_pos);
			log_info("SRC_DEVID:%s CLOUD_API_KEY:%s\r\n",SRC_DEVID,CLOUD_API_KEY);
		
			ret = Socket_TCPClientSendData((char *)connect_pkg->_data, connect_pkg->_write_pos);
			DeleteBuffer(&connect_pkg);
			if (ret < 0) {
				cloud_conn_status.conn_status = CLOUD_CONN_ERROR;
				log_info("Send connect data failed(ret:%d).\n", ret);
		        failedcnt++;
		        /* 发送连接次数超过3次则退出连接 */
		        if (failedcnt > 3) {
		            Socket_TCPClientClose();
		            return -1;
		        }
		        OSTimeDly(50);
				goto AGAIN;
			} else {
				log_notice("Send connect data success.\n");
			}
	#endif


	/* 主进程用于接收云端服务器的数据 */
	while (1)
	{
		ret = Socket_TCPClientRecvData(recv_buf, CLOUD_RECV_BUFFER_SIZE);
		if (ret > 0) {
			recv_buf[ret] = '\0';
			#if   (4 & Devid_Mode) //restful方式
			   log_notice("%s\r\n",recv_buf);
			   RestFul_RecvProcess(recv_buf,ret);
			#else
               recv_data_process(recv_buf, ret);
			#endif
		}
		
		if (ret < 0 || TCPClient_reset_flag == 0xa5 ) {  //关闭TCP链接
			log_err("Recv tcp client data error(%d)\n", ret);
			Socket_TCPClientClose();
			return -1;
		}
	}
}
示例#2
0
int Socket_TCPClientRecvData(char *recvbuf, int len)
{
    fd_set readfds;
    int recv_count = 0;
    struct timeval tmv;

    tmv.tv_sec = 1;	/* user can change this value */
	tmv.tv_usec = 0;    
    memset(recvbuf, 0, len);
    
	FD_ZERO (&readfds);
	FD_SET (TCPClientFd, &readfds);
    
	if ((select((TCPClientFd + 1), &readfds, NULL, NULL, &tmv) == -1)
			 || (TCPClient_reset_flag == 0xa5))
    {      
	    return -1;
    }
    
    if (FD_ISSET(TCPClientFd, &readfds))    
    {
        recv_count = recv(TCPClientFd, recvbuf, len, 0);        
		if((recv_count) <= 0)
		{
			log_info("TCP client(%d) receive data failed.\n", TCPClientFd);
    		Socket_TCPClientClose();
			return -2;
		}         
    }
    return recv_count;
}
示例#3
0
int Socket_CreateTCPServer(void)
{
    struct sockaddr_in addr;

    if (TCPServerFd == -1)
    {
        TCPServerFd = socket(AF_INET, SOCK_STREAM, 0);
        if (TCPServerFd < 0)
        {
            log_err("Create TCP server socket failed, errno:%d\n", errno);
            TCPServerFd = -1;
            return -1;
        }

        memset(&addr, 0, sizeof(addr));
        addr.sin_family = AF_INET;
        addr.sin_port = htons(TCP_SERVER_PORT);
        addr.sin_addr.s_addr = INADDR_ANY;

        if (bind(TCPServerFd, (struct sockaddr *)&addr, sizeof(addr)) != 0)
        {
            log_err("Bind TCP server failed, errno:%d\n", errno);
            Socket_TCPClientClose();
            return -1;
        }

        if (listen(TCPServerFd, 0) != 0)
        {
            log_err("Listen TCP server failed, errno:%d.\n", errno);
            Socket_TCPClientClose();
            return -1;
        } 
	    log_debug("TCP Server socketid:%d(port:%d).\n", TCPServerFd, TCP_SERVER_PORT);
	
	    return TCPServerFd;
    } else {
        //log_debug("TCP server socket exist, create UDP server failed.\n");
        return -1;
    }
}