论坛: 编程破解 标题: 一个unix下传输文件程序的问题 复制本贴地址    
作者: NetMelody [mmgg00]    论坛用户   登录
大家帮我看看,写的一个 unix下传输文件的程序,服物端和客户端都运行成功,但是只能收到传输的文件名,收不到内容,我是在FreeBSD下调试的程序,谢谢了
server:
代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <errno.h>
#include <unistd.h>
main()
{
int listenfd,connfd,n,fd;
char buf1[4096],buf2[4096];
char name[30];
pid_t childpid;
size_t clilen;
struct sockaddr_in cliaddr,servaddr;
printf("Please Input The File's Name:");
scanf("%s",name);
if((fd=open(name,O_RDONLY))<0){
fprintf(stderr,"OPEN Error");
exit(1);
}
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(5555);
bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
listen(listenfd,5);
for(;;){
clilen=sizeof(cliaddr);
connfd=accept(listenfd,(struct sockaddr *)&cliaddr,&clilen);
if((childpid=fork())==0){
close(listenfd);
lseek(fd,0,SEEK_SET);
write(connfd,name,sizeof(name));
while((n=read(fd,buf1,sizeof(buf1)))>0)
write(connfd,buf1,n);
printf("transport end\n");
exit(0);
}
close(connfd);
}
close(fd);
}


client:
代码:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)
int main(int argc,char *argv[])
{
int listenfd,n,fd,ret;
char buf1[4096];
char name[30];
struct sockaddr_in cliaddr,servaddr;
struct hostent *host;
if(argc<3){
fprintf(stderr,"Usage:./client ip port");
exit(1);
}
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
if((host=gethostbyname(argv[1]))==NULL){
fprintf(stderr,"client gethostbyname error");
exit(1);
}
servaddr.sin_addr=*((struct in_addr *)host->h_addr);
servaddr.sin_port=htons(5555);
ret=connect(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
if(ret==-1){
fprintf(stderr,"client connect error");
exit(1);
}
while((n=read(listenfd,name,sizeof(name)))>=0){
if((fd=open(name,O_WRONLY|O_CREAT|O_TRUNC,FILE_MODE))<0){
fprintf(stderr,"can not open");
exit(1);
}
}
write(1,name,sizeof(name));
while((n=read(listenfd,buf1,sizeof(buf1)))>0)
write(fd,buf1,n);
fprintf(stderr,"receive success");
close(listenfd);
close(fd);
}







[此贴被 NetMelody(mmgg00) 在 05月24日00时34分 编辑过]

地主 发表时间: 05-05-24 00:19

回复: NetMelody [mmgg00]   论坛用户   登录
一晃十几年过去了,回过来看看年轻时候的自己

代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <errno.h>
#include <unistd.h>
main()
{
int listenfd,connfd,n,fd;
char buf1[4096],buf2[4096];
char name[30];
pid_t childpid;
size_t clilen;
struct sockaddr_in cliaddr,servaddr;
printf("Please Input The File's Name:");
scanf("%s",name);
if((fd=open(name,O_RDONLY))<0){
fprintf(stderr,"OPEN Error");
exit(1);
}
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(5555);
        int option = 1;
        setsockopt (listenfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option) );
        bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));

listen(listenfd,5);
for(;;){
clilen=sizeof(cliaddr);
connfd=accept(listenfd,(struct sockaddr *)&cliaddr,&clilen);
if((childpid=fork())==0){
close(listenfd);
lseek(fd,0,SEEK_SET);
write(connfd,name,sizeof(name));
while((n=read(fd,buf1,sizeof(buf1)))>0)
write(connfd,buf1,n);
printf("transport end\n");
exit(0);
}
close(connfd);
}
close(fd);
}


client:
代码:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
#define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)
int main(int argc,char *argv[])
{
int listenfd,n,fd,ret;
char buf1[4096];
char name[30];
struct sockaddr_in cliaddr,servaddr;
struct hostent *host;
if(argc<3){
fprintf(stderr,"Usage:./client ip port");
exit(1);
}
listenfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
if((host=gethostbyname(argv[1]))==NULL){
fprintf(stderr,"client gethostbyname error");
exit(1);
}
servaddr.sin_addr=*((struct in_addr *)host->h_addr);
servaddr.sin_port=htons(5555);
ret=connect(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
if(ret==-1){
fprintf(stderr,"client connect error");
exit(1);
}
n=read(listenfd,name,sizeof(name));
        if((fd=open(name,O_WRONLY|O_CREAT|O_TRUNC,FILE_MODE))<0){
                fprintf(stderr,"can not open %s", strerror(errno));
                exit(1);
        }
write(1,name,sizeof(name));
while((n=read(listenfd,buf1,sizeof(buf1)))>0)
write(fd,buf1,n);
fprintf(stderr,"receive success");
close(listenfd);
close(fd);
}




B1层 发表时间: 16-07-23 09:02

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号