x_file 0 Denunciar post Postado Julho 2, 2009 Bom dia a todos. Tenho um progama que coleta os dados do meu banco de dados local e repassa essa consulta via socket-ip. Na parte de Protocolo a ser enviado. Quero enviar a str = FF010 + (a quantidade de todos os caracteres de str) +000099099101 + (a consulta do mysql convertida em hexa) e enviar essa linha por socket. Como eu poderia melhorar isso ? Obrigado desde já pela atenção char string1[5096], query[100], Tid[50]; void envia_data(char *envia_string); conn = mysql_init(NULL); /*==============================Conexão com o Database================================*/ if (!mysql_real_connect(conn, host,user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(0); } /*================================SQL Query========================================*/ if (mysql_query(conn, "SELECT data_hora_entrada, end_destino, end_origem, ID_pacote" ", dados_pacote, status_transmissao, data_hora_saida from SAIDA_DIB6;")) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(0); } res = mysql_use_result(conn); // recupera os resultados /* ===============================Seleciona os campos de 0 a 7 ========================== */ while ((row = mysql_fetch_row(res)) != NULL) { bzero(string1, sizeof(string1)); //bzero - preenche uma string de bytes com zeros. [b]sprintf(string1,"%s%s%s%s%s%s%s", row[0],row[1],row[2],row[3], row[4],row[5],row[6],row[7]); //campos da tabela SAIDA_DIB6[/b] // printf ("%s\n",string1); envia_data(string1); } void envia_data(char *envia_string) { char buf[8192]; char message[256]; int socket_descriptor; struct sockaddr_in pin; /* Estrutura de informações do socket. pin */ struct hostent *server_host_name; char * host_name = "000.000.00.000"; //ip int port = 110; // porta char * str = "Teste de String"; /*================================Protocolo a ser enviado==============================*/ char ptc = "FF0100"; char ptc2 = "000099099101"; str = ptc (sizeof ("%s",str))ptc2("%X",string1); // Recebe o tamanho de string1 e recebe dados do DB Saida_DIB6 str = envia_data; Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Julho 2, 2009 O teu problema é só ali com a string? Cara, poste apenas a parte do código importante para a resolução do problema, se não fica muito poluido. não sei se etendi... veja se é isso: char head[]="FF010"; char middle[]="000099099101" char *dados_do_mysql; int tamanho; tamanho = strlen(head) + strlen(middle) + strlen(dados_do_mysql); //temos que ver quantos digitos a variável "tamanho" ocupa, pois influenciará no tamanho total da string. if (tamanho < 100) tamanho += 2 else if (tamanho > 999) tamanho += 4 else tamanho += 3 sprintf(string, "%s%d%s%s", head, tamanho, middle, dados_do_mysql); Compartilhar este post Link para o post Compartilhar em outros sites
x_file 0 Denunciar post Postado Julho 2, 2009 cara você respondeu apenas uma parte que era somar os caracteres. fiz algumas mudanças no meu código confere pra mim por favor char head[]="FF010"; char middle[]="000099099101"; char * string1; // resultado do mysql int tamanho; tamanho = strlen(head) + strlen(tamanho) +strlen(middle)+ strlen(string1); // gera um protocolo(FF010+(soma de todos os caracteres)+000099099101+resultado do mysql) que será enviado via socket str = scanf("%s %d %s %X", head, tamanho, middle, string1); Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Julho 2, 2009 A função strlen recebe um ponteiro para char como argumento, e retorna um inteiro. strlen(tamanho)está errado... outra coisa que não faz o menor sentido, é você fazer: int a; a = a + 341 -5; a variável "a" não foi inicializada, o resultado disso é absolutamente imprevisível. (você está fazendo isso com a variável tamanho....) E atenção, você não está gerando um protocolo, você está enviando uma string formatada DE ACORDO COM um protocolo Cuidado para não confundir alguns conceitos... --------------------------------------------------------------------------------- cara você respondeu apenas uma parte que era somar os caracteres. Quero enviar a str = FF010 + (a quantidade de todos os caracteres de str) +000099099101 + (a consulta do mysql convertida em hexa) e enviar essa linha por socket. Como eu poderia melhorar isso ? Obrigado desde já pela atenção e o que mais você queria fazer?? "Para ter a resposta correta é preciso fazer a PERGUNTA correta" -- Albert Einstein Compartilhar este post Link para o post Compartilhar em outros sites
x_file 0 Denunciar post Postado Julho 2, 2009 victor olhei direito o cod. e consegui obrigado Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Julho 3, 2009 Ainda bem que deu certo! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites