I want to ask, why I cannot transfer file from server to client?
When I start to send the file from server, the client side program will have problem.
So, I spend some times to check the code,
But I still cannot find out the problem
Can anyone point out the problem for me?
thanks a lot!
[client side code]
include 
include 
include 
include 
include 
include 
include 
define SA struct sockaddr
define S_PORT 5678
define MAXLEN 1000
define true 1
void errexit(const char *format, ...)
{
    va_list args;
    va_start(args, format);
    vfprintf(stderr, format, args);
    va_end(args);
    WSACleanup();
    exit(1);
}
int main(int argc, char *argv [])
{
    WSADATA wsadata;
    SOCKET sockfd;
    int number,message;
    char outbuff[MAXLEN],inbuff[MAXLEN];
    char PWD_buffer[_MAX_PATH];
    struct sockaddr_in servaddr;
    FILE *fp;
    int numbytes;
    char buf[2048];
if (WSAStartup(MAKEWORD(2,2), &wsadata) != 0)
    errexit("WSAStartup failed\n");
if (argc != 2)
    errexit("client IPaddress");
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET )
    errexit("socket error: error number %d\n", WSAGetLastError());
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(S_PORT);
if ( (servaddr.sin_addr.s_addr = inet_addr(argv[1])) == INADDR_NONE)
    errexit("inet_addr error: error number %d\n", WSAGetLastError());
if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) == SOCKET_ERROR)
    errexit("connect error: error number %d\n", WSAGetLastError());
if ( (fp = fopen("C:\\users\\pc\\desktop\\COPY.c", "wb")) == 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;
}
server side code
include 
include 
include 
include 
include 
include 
include 
include 
define SA struct sockaddr
define S_PORT 5678
define MAXLEN 1000
void errexit(const char *format, ...)
{
    va_list args;
    va_start(args, format);
    vfprintf(stderr, format, args);
    va_end(args);
    WSACleanup();
    exit(1);
}
int main(int argc, char *argv [])
{
    WSADATA wsadata;
    SOCKET listenfd, connfd;
    int number, message, numbytes;
    int h, i, j, alen;
    int nread;
    struct sockaddr_in servaddr, cliaddr;
    FILE *in_file, *out_file, *fp;
    char buf[4096];
if (WSAStartup(MAKEWORD(2,2), &wsadata) != 0)
    errexit("WSAStartup failed\n");
listenfd = socket(AF_INET, SOCK_STREAM, 0);
if (listenfd == INVALID_SOCKET)
    errexit("cannot create socket: error number %d\n", WSAGetLastError());
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family      = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port        = htons(S_PORT);
if (bind(listenfd, (SA *) &servaddr, sizeof(servaddr)) == SOCKET_ERROR)
    errexit("can't bind to port %d: error number %d\n", S_PORT, WSAGetLastError());
if (listen(listenfd, 5) == SOCKET_ERROR)
    errexit("can't listen on port %d: error number %d\n", S_PORT, WSAGetLastError());
alen = sizeof(SA);
connfd = accept(listenfd, (SA *) &cliaddr, &alen);
if (connfd == INVALID_SOCKET)
    errexit("accept failed: error number %d\n", WSAGetLastError());
printf("accept one client from %s!\n", inet_ntoa(cliaddr.sin_addr));
fp = fopen ("client.c", "rb"); // 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);    
closesocket(listenfd);
closesocket(connfd);
return 0;
}