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);
}
}
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
Melhorando a precisão de valores flutuantes em python[RESOLV... (15)
Mint começou a apresentar varios erros (2)
Recuperar arquivos de HD em formato RAW usando Linux (1)