|
|

楼主 |
发表于 2005-7-14 08:52:27
|
显示全部楼层
服务器端的程序:
#define BACKLOG 10
#define SERVERFILENAME "server.dat"
int main(){
long int i,totalSize,temp1;
int sockfd;
struct sockaddr_in myaddr,theiraddr;
int newsockfd,addrlen;
int j;
int opt,optlen;
char sockbuf[10];
char *ptr;
FILE *fp;
int totalRead;
char bufsend[1024];
int realRead;
if((fp=fopen(SERVERFILENAME,"r"))==NULL){
fprintf(stderr,"fopen");
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket");
exit(1);
}
opt=1;
optlen=sizeof(opt);
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,optlen);
memset(&myaddr,0,sizeof(struct sockaddr_in));
memset(&theiraddr,0,sizeof(struct sockaddr_in));
myaddr.sin_family=AF_INET;
myaddr.sin_port=htons(MYPORT);
myaddr.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sockfd,(struct sockaddr*) &myaddr,sizeof(struct sockaddr))==-1){
perror("bind");
exit(1);
}
if(listen(sockfd,BACKLOG)==-1){
perror("listen");
exit(1);
}
addrlen=sizeof(struct sockaddr);
printf("server is listening...\n");
if((newsockfd=accept(sockfd,(struct sockaddr*) &theiraddr, \
&addrlen))==-1){
perror("accept");
exit(1);
}
printf("now connected with %s\n",inet_ntoa(theiraddr.sin_addr));
while(!feof(fp)){
realRead=fread(bufsend,1,sizeof(bufsend),fp);
if(send(newsockfd,bufsend,realRead,0)!=realRead){
perror("send");
exit(1);
}
}
close(newsockfd);
close(sockfd);
return 0;
} |
|