Jimmy_N
(usa Ubuntu)
Enviado em 10/12/2010 - 21:06h
Boa noite pessoal, estou tendo problemas com um programinha q teóricamente deveria capturar um texto digitado pelo usuário e enviar para um servidor armazená-lo. Declarei algumas libs num arkivo .h e conecto no servidor passando o ip como parametro na hora de executar o cliente.
O problema está em como enviar os dados. Bom, o código está aí, espero q alguém possa me dar uma luz.
#include <stdio.h>
#include <stdlib.h>
#include "./cliente_servidor.h"
void cliente_tcp()
{
int pkt_enviar = 0;
int sockfd = 0;
int numbytes = 0;
int id = 0;
int addr_len = 0;
int sin_size = sizeof(struct sockaddr_in);
mensagem *msg_send = (mensagem *) malloc (sizeof(mensagem));
mensagem *msg_recv = (mensagem *) malloc (sizeof(mensagem));
struct sockaddr_in serv_addr;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(TCP_C_SERV_PORT);
serv_addr.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(serv_addr.sin_zero), 8);
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)
{
perror("connect");
exit(1);
}
id++;
if (pkt_enviar != 1)
{
msg_send->id_msg = id;
}
else
{
msg_send->id_msg = NUM_MAX_PKTS + 1;
}
// msg_send->inicio = 0;
// msg_send->final = 0;
if (send(sockfd, msg_send, sizeof(msg_send), 0) == -1)
{
perror("send");
exit(0);
}
if ((numbytes=recv(sockfd, msg_recv, sizeof(msg_recv), 0)) == -1)
{
perror("recv");
exit(1);
}
if (msg_recv->id_msg == (NUM_MAX_PKTS + 1))
{
msg_recv->id_msg = id;
}
pkt_enviar--;
close(sockfd);
free(msg_send);
free(msg_recv);
}
int main(int argc, char *argv[])
{
int op = 0;
char msg_send;
if (argc != 2)
{
fprintf(stderr,"usage: ./cliente <ip do servidor>\n");
exit(1);
}
if ((he=gethostbyname(argv[1])) == NULL)
{
perror("gethostbyname");
exit(1);
}
do
{
int not, remove;
char resp, select;
printf("\n Escolha uma opção:\n");
printf("\n1 - Publicar nova noticia");
printf("\n2 - Consultar noticias existentes");
printf("\n3 - Visualizar noticia");
printf("\n4 - Remover noticia");
printf("\n5 - Sair\n");
scanf ("%d", &op);
switch(op)
{
case 1:
{
system ("touch noticia.txt");
printf ("\nDigite a nova noticia\n");
fgets (strcat *msg_send);
{
FILE *fd;
fd=fopen ("noticia.txt", "w");
fputs (strcat *msg_send, fd);
fclose(fd);
}
break;
}
case 2:
{
printf ("\nLista de noticias existentes:\n");
system ("ls *.txt |cat -n > lista.rtf\n");
system ("cat lista.rtf");
break;
}
case 3:
{
printf ("\nSelecione a noticia:\n");
scanf ("%d",¬);
{
FILE *fd;
char buffer[1000];
fd=fopen ("noticia.rtf", "r");
while (!feof(fd))
{
fgets(buffer,100, fd);
printf ("%s",buffer);
}
}
break;
}
case 4:
{
printf ("\nDigite o numero da noticia que voce deseja remover:\n");
scanf ("%d",&remove);
system ("cat lista.rtf|grep -v $remove >lista.rtf");
break;
}
case 5:
{
printf ("\nSair\n");
exit(1);
break;
}
default: printf("Opcao invalida");
}
}
while(op != 5);
}