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);
}
}
O que é o THP na configuração de RAM do Linux e quando desabilitá-lo
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Como unir duas coleções de ROMs preservando as versões traduzidas (sem duplicatas)
Como instalar o Telegram Desktop no Ubuntu 24.04
Overclocking Permanente para Drastic no Miyoo Mini Plus
Problemas de chaves (/usr/share/keyrings) no Debian
Converter os repositórios Debian para o novo formato com as chaves
Problema com audio apos upgrade (2)
eu preciso saber uma coisa sobre os games no linux (3)
eu preciso saber uma coisa sobre os games no linux (1)