Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

x_file

[Resolvido] Envio de dados via socket tcp/ip

Recommended Posts

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.