Enviado em 07/04/2013 - 18:39h
Boa noite, estou fazendo uma aplicação cliente/servidor onde o cliente informa o caminho do arquivo e o envia ao servidor e ele salva o arquivo. Ambos compilam o código segue abaixo e gostaria de saber se e possível enviar o arquivo compactado.
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int sock;
struct sockaddr_in address;
char caminho[100], tam[6];
FILE *origem, *copia;
char *localOrigem = "/home/maryfredy/Área de Trabalho/origem.txt";
char *localCopia = "/home/maryfredy/Área de Trabalho/copia.txt";
int conectar(char *server) {
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) > 0) {
printf("Socket configurado\n");
}
address.sin_family = AF_INET;
address.sin_port = htons(8888);
inet_pton(AF_INET,server,&address.sin_addr);
if (connect(sock,(struct sockaddr *)&address,sizeof(address)) == 0) {
return 1;
}
return 0;
}
int abrirArquivo( ) {
if ((origem=fopen (caminho, "rb")) == NULL)
{
printf ("o arquivo de origem nao pode ser aberto\n");
exit (1);
}
if ((copia=fopen (localCopia, "wb")) == NULL)
{
printf ("o arquivo para copia nao pode ser aberto\n");
exit (1);
}
}
long calcTamArq(FILE *arquivo) {
long Atual = ftell(arquivo);
long tam;
fseek(arquivo, 0l, SEEK_END);
tam = ftell(arquivo);
fseek(arquivo, Atual, SEEK_SET);
printf ("TAMANHO: %ld\n",tam);
return tam;
}
void enviar(char mensagem[] ){
if(send(sock,mensagem,sizeof(mensagem),0)<0){
perror("Erro no envio de dados");
exit(1);
}
}
char* recebe(){
char recebido[100];
if(recv(sock,recebido,sizeof(recebido),0)<0){
perror("Erro no recebimento de dados ");
exit(1);
}
}
void enviaChar(char mensagem ){
if(send(sock,mensagem,sizeof(mensagem),0)<0){
perror("Erro no envio ");
exit(1);
}
}
main ( ){
char ch[1];
long tamArq;
char serverName[20];
printf("Digite o IP ou hostname do servidor ao qual deseja de conectar: ");
gets(serverName);
if(conectar(serverName)){
printf ("Digite o caminho do arquivo:\n");
gets(caminho);
abrirArquivo ( );
tamArq = calcTamArq(origem);
sprintf(tam,"%ld",tamArq);
printf ("TAMANHO: %s\n",tam);
enviar(tam);
while(!feof(origem))
{
ch[0] = getc (origem);
if(ferror(origem)) {
printf("erro lendo o arquivo");
break;
}
enviar(ch);
putc (ch[0], copia);
if(ferror(copia)) {
printf("erro na gravacao do arquivo");
break;
}
}
fclose (origem);
fclose (copia);
return 0;
}
else {
printf("\nNao foi possivel conectar...");
}
}
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
int sockServer, sockClient, addrlen;
struct sockaddr_in address;
char arquivo[100], copia[6]
;
int iniciaServer() {
system("clear");
if ((sockServer = socket(AF_INET, SOCK_STREAM, 0)) > 0) {
printf("Socket criado\n");
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(8888);
if (bind(sockServer,(struct sockaddr *)&address,sizeof(address)) == 0) {
printf("Aguardando conexao...\n");
}
listen(sockServer, 3);
addrlen = sizeof(struct sockaddr_in);
sockClient = accept(sockServer,(struct sockaddr *)&address,&addrlen);
if (sockClient > 0) {
return 1;
}
return 0;
}
void receber (){
if(recv(sockClient,copia,sizeof(copia),0)<0){
perror("Erro no recebimento de dados");
exit(1);
}
}
void recebeChar (char ch[]){
if(recv(sockClient,ch,sizeof(ch),0)<0){
perror("Erro no recebimento de dados");
exit(1);
}
}
main ( ){
char *localCopia = "/home/maryfredy/Área de Trabalho/copia.txt";
FILE *Copia;
char ch[1];
long fileSize;
if (iniciaServer( )) {
printf("\nConexao estabelecida!");
if ((Copia=fopen (localCopia, "wb")) == NULL)
{
printf ("Arquivo para copia nao pode ser aberto\n");
exit (1);
}
printf("\nTamanho do Arquivo: %s\n\n", copia);
fileSize = atof(copia);
printf("\nTamanho do Arquivo: %ld\n\n", fileSize);
int i;
for(i=0;i<fileSize;i++){
recebeChar(ch);
putc (ch[0], Copia);
if(ferror(Copia)) {
printf("erro na gravacao do arquivo");
break;
}
}
printf("fim");
fclose (Copia);
fclose (sockServer);
close(sockClient);
}
}
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta