서버에서 클라이언트로 파일을 전송할 수없는 이유는 무엇입니까? 서버에서 파일을 보내기 시작할 때 클라이언트 측 프로그램에 문제가 있습니다. 그래서 코드를 확인하기 위해 약간의 시간을 할애합니다. 하지만 여전히 문제를 찾을 수 없습니다. 누구든지 나를 위해 문제를 지적 할 수 있습니까?C 소켓을 사용하여 서버에서 클라이언트로 파일을 전송할 때 문제가 발생합니다.
CLIENTFILE.C
#include stdio.h
#include stdlib.h
#include time.h
#include netinet/in.h
#include fcntl.h
#include sys/types.h
#include string.h
#include stdarg.h
#define PORT 5678
#define MLEN 1000
int main(int argc, char *argv [])
{
int sockfd;
int number,message;
char outbuff[MLEN],inbuff[MLEN];
//char PWD_buffer[_MAX_PATH];
struct sockaddr_in servaddr;
FILE *fp;
int numbytes;
char buf[2048];
if (argc != 2)
fprintf(stderr, "error");
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
fprintf(stderr, "socket error");
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
fprintf(stderr, "connect error");
if ((fp = fopen("/home/na/nall9047/write.txt", "w")) == NULL){
perror("fopen");
exit(1);
}
printf("Still NO PROBLEM!\n");
//Receive file from server
while(1){
numbytes = read(sockfd, buf, sizeof(buf));
printf("read %d bytes, ", numbytes);
if(numbytes == 0){
printf("\n");
break;
}
numbytes = fwrite(buf, sizeof(char), numbytes, fp);
printf("fwrite %d bytes\n", numbytes);
}
fclose(fp);
close(sockfd);
return 0;
}
SERVERFILE.C 다른 어떤에서
#include stdio.h
#include fcntl.h
#include stdlib.h
#include time.h
#include string.h
#include netinet/in.h
#include errno.h
#include sys/types.h
#include sys/socket.h
#includ estdarg.h
#define PORT 5678
#define MLEN 1000
int main(int argc, char *argv [])
{
int listenfd, connfd;
int number, message, numbytes;
int h, i, j, alen;
int nread;
struct sockaddr_in servaddr;
struct sockaddr_in cliaddr;
FILE *in_file, *out_file, *fp;
char buf[4096];
listenfd = socket(AF_INET, SOCK_STREAM, 0);
if (listenfd < 0)
fprintf(stderr,"listen error") ;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(PORT);
if (bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
fprintf(stderr,"bind error") ;
alen = sizeof(struct sockaddr);
connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &alen);
if (connfd < 0)
fprintf(stderr,"error connecting") ;
printf("accept one client from %s!\n", inet_ntoa(cliaddr.sin_addr));
fp = fopen ("/home/na/nall9047/read.txt", "r"); // open file stored in server
if (fp == NULL) {
printf("\nfile NOT exist");
}
//Sending file
while(!feof(fp)){
numbytes = fread(buf, sizeof(char), sizeof(buf), fp);
printf("fread %d bytes, ", numbytes);
numbytes = write(connfd, buf, numbytes);
printf("Sending %d bytes\n",numbytes);
}
fclose (fp);
close(listenfd);
close(connfd);
return 0;
}
-1 일부 문제에 대한 설명이 유용 할 것입니다. 또한 형식이 잘못되었습니다. – WildCrustacean
동의합니다. 도움을 받기 전에 더 많은 정보가 필요합니다. 또한, 어떤 운영 체제입니까? –
우분투 9.10을 사용하고 있습니다. 미안합니다. 초보자입니다. 제대로 포맷 할 수 없었습니다. – SuperMan