UDP文件传输总是不成功,求

UDP文件传输总是不成功,求高手指点!
想用UDP协议写个文件传输的程序,client发个文件名给server,server再将指定的文件传递给client,在这里我没有考虑丢包和包的顺序问题,但是客户端接收到的文件总是0KB,也不知道哪里出了问题,求指点啊!
下面是我写的代码:

// server.c
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<netdb.h>
#include<stdarg.h>
#include<string.h>

#define SERVER_PORT 8000
#define BUFFER_SIZE 1024
#define FILE_NAME_MAX_SIZE 512

int main()
{
/* 创建UDP套接口 */
struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(SERVER_PORT);

/* 创建socket */
int server_socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
if(server_socket_fd == -1)
{
perror("Create Socket Failed:");
exit(1);
}

/* 绑定套接口 */
if(-1 == (bind(server_socket_fd,(struct sockaddr*)&server_addr,sizeof(server_addr))))
{
perror("Server Bind Failed:");
exit(1);
}

/* 定义一个地址,用于捕获客户端地址 */
struct sockaddr_in client_addr;
socklen_t client_addr_length = sizeof(client_addr);

/* 数据传输 */
while(1)
{

/* 接收数据 */
char buffer[BUFFER_SIZE];
bzero(buffer, BUFFER_SIZE);
if(recvfrom(server_socket_fd, buffer, BUFFER_SIZE,0,(struct sockaddr*)&client_addr, &client_addr_length) == -1)
{
perror("Receive Data Failed:");
exit(1);
}

/* 从buffer中拷贝出file_name */
char file_name[FILE_NAME_MAX_SIZE+1];
bzero(file_name,FILE_NAME_MAX_SIZE+1);
strncpy(file_name, buffer, strlen(buffer)>FILE_NAME_MAX_SIZE?FILE_NAME_MAX_SIZE:strlen(buffer));
printf("%s\n", file_name);

/* 打开文件 */
FILE *fp = fopen(file_name, "r");
if(NULL == fp)
{
printf("File:%s Not Found.\n", file_name);
}
else
{
bzero(buffer, BUFFER_SIZE);
int len = 0;
/* 每读取一段数据,便将其发给客户端 */
while((len = fread(buffer, sizeof(char), BUFFER_SIZE, fp)) > 0)
{
if(sendto(server_socket_fd,buffer,len,0,(struct sockaddr*)&client_addr, client_addr_length) < 0);
{
perror("Send File Failed:");
break;
}
bzero(buffer, BUFFER_SIZE);
}
/* 关闭文件 */
fclose(fp);
printf("File:%s Transfer Successful!\n", file_name);
}
}
close(server_socket_fd);
return 0;
}



// client.c
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<netdb.h>
#include<stdarg.h>
#include<string.h>

#define SERVER_PORT 8000
#define BUFFER_SIZE 1024
#define FILE_NAME_MAX_SIZE 512

int main()
{
/* 服务端地址 */
struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(SERVER_PORT);
socklen_t server_addr_length = sizeof(server_addr);

/* 创建socket */
int client_socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
if(client_socket_fd < 0)
{
perror("Create Socket Failed:");
exit(1);
}

/* 输入文件名到缓冲区 */
char file_name[FILE_NAME_MAX_SIZE+1];
bzero(file_name, FILE_NAME_MAX_SIZE+1);
printf("Please Input File Name On Server: ");
scanf("%s", file_name);

char buffer[BUFFER_SIZE];
bzero(buffer, BUFFER_SIZE);
strncpy(buffer, file_name, strlen(file_name)>BUFFER_SIZE?BUFFER_SIZE:strlen(file_name));

/* 发送文件名 */
if(sendto(client_socket_fd, buffer, BUFFER_SIZE,0,(struct sockaddr*)&server_addr,server_addr_length) < 0)
{
perror("Send File Name Failed:");
exit(1);
}

/* 打开文件,准备写入 */
FILE *fp = fopen(file_name, "w");
if(NULL == fp)
{
printf("File:\t%s Can Not Open To Write\n", file_name); 
exit(1);
}

/* 从服务器接收数据,并写入文件 */
bzero(buffer, BUFFER_SIZE);
int len = 0;
while((len = recvfrom(client_socket_fd, buffer,BUFFER_SIZE,0,(struct sockaddr*)&server_addr,&server_addr_length)) > 0)
{
if(fwrite(buffer, sizeof(char),len, fp) < len)
{
printf("File:\t%s Write Failed\n", file_name);
break;
}
bzero(buffer, BUFFER_SIZE);