Chinaunix首页 | 论坛 | 博客
  • 博客访问: 375688
  • 博文数量: 124
  • 博客积分: 2911
  • 博客等级: 少校
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-15 15:57
文章分类

全部博文(124)

文章存档

2012年(6)

2011年(26)

2010年(92)

我的朋友

分类: LINUX

2010-06-15 18:40:17

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define MAXDATASIZE 1024000
#define NAMESIZE 30
#define ServerPort 3333

int main (){

    char buf[MAXDATASIZE], file[NAMESIZE];
    int k,sin_size, source;
    register int sockfd, client_fd;

    struct sockaddr_in sin, cltaddr;
    struct stat filestate;

    printf("input filename:\n");
    scanf("%s",file);

    stat(file,&filestate);
    printf("文件大小为:%d\n",filestate.st_size);

    if((source = open(file, O_RDONLY))<0)
    {
        perror("cant open the file!");
        exit(1);
    }
    printf("open succeed! gonna transfer the file....\n");

/*****************************************************************************************************************/
    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        perror("get SOCKET NO. failed!");
        exit(1);
    }

    sin.sin_family = AF_INET;
    sin.sin_port = htons(ServerPort);
    sin.sin_addr.s_addr = INADDR_ANY;
    bzero(&(sin.sin_zero),8);

    int on = 1;
    setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));    
    
    if(bind(sockfd, (struct  sockaddr *)&sin, sizeof(struct sockaddr)) == -1)
    {
        perror("bind failed!");
        close(sockfd);       
        exit(1);
    }
   
    if((listen(sockfd, 10)) == -1)
    {
        perror("listen failed!");
        exit(1);   
    }
/*****************************************************************************************************************/
    while(1)
    {
        sin_size = sizeof(struct sockaddr_in);

        if((client_fd = accept(sockfd, (struct sockaddr *)&cltaddr, &sin_size)) == -1)
        {
            perror("accept failed!");
            continue;
        }
        lseek(source, 0L,1);
/*****************************************************************************************************************/
        pid_t pid;       
        switch(pid = fork())
        {
            case -1:
                    perror("cant fork()!");
                    break;
            case 0:
                    k = read(source, buf, filestate.st_size);
                    write(client_fd, buf, k);
                    printf("传输大小为: %d\n",k);
/*
                    while(k = read(source, buf,sizeof(buf))>0)
                    {   
                        write(client_fd, buf, k);
                    }
*/
                    printf("trans completed!\n");
                    close(client_fd);
                    close(source);
                    exit(0);
            default:
                    break;
        }   
    }//while(1)
    close(client_fd);
    close(source);
    exit(0);
}

/********************************************
*1.serv:read(source,buf,1)阻塞,read(source,buf,*)莫名
*2.
********************************************/

=================================================================================================================
#include
#include
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define ServerPort 3333
#define MAXDATASIZE 1024
#define NAMESIZE 30

int main(int argc, char** argv){ 
    char buf[MAXDATASIZE],filename[NAMESIZE];
    int  target;
    register int k,sockfd;
    struct sockaddr_in serv_addr;
    struct hostent *hp;
/**************************************************************************************************************/
    if(argc!=2)
    {
        printf("Usage:\n");
        exit(1);
    }

    if(!(hp=gethostbyname(argv[1])))
    {  
        herror("gethostbyname failed!");
        exit(1);
    }

/**************************************************************************************************************/
    if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
    {  
        perror("sockfd failed!");  
        exit(1);
    }

    serv_addr.sin_family = AF_INET;  
    serv_addr.sin_port = htons(ServerPort);

    bcopy(hp->h_addr,&serv_addr.sin_addr,hp->h_length);
    printf("connecting...\n\n");

    if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)
    {
        perror("cant connect server!");
        exit(1);  
    }

/**************************************************************************************************************/

    if((target=open(filename,O_WRONLY|O_CREAT|O_TRUNC,0644))<0)
    {  
        perror("cant open or create file");
        exit(1);
    }

    while((k = read(sockfd,buf,sizeof(buf)))>0)
    {
        write(target,buf,k);
    }

    printf("\n*******succeed!******\n");

    close(sockfd);
    close(target);
}
/**************************************************************************************************************/
#include
#include
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define ServerPort 3333
#define MAXDATASIZE 1024
#define NAMESIZE 30

int main(int argc, char** argv){ 
    char buf[MAXDATASIZE],filename[NAMESIZE];
    int  target;
    register int k,sockfd;
    struct sockaddr_in serv_addr;
    struct hostent *hp;
/**************************************************************************************************************/
    if(argc!=2)
    {
        printf("Usage:\n");
        exit(1);
    }

    if(!(hp=gethostbyname(argv[1])))
    { 
        herror("gethostbyname failed!");
        exit(1);
    }

/**************************************************************************************************************/
    if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
    { 
        perror("sockfd failed!"); 
        exit(1);
    }

    serv_addr.sin_family = AF_INET; 
    serv_addr.sin_port = htons(ServerPort);

    bcopy(hp->h_addr,&serv_addr.sin_addr,hp->h_length);
    printf("connecting...\n\n");

    if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)
    {
        perror("cant connect server!");
        exit(1); 
    }

/**************************************************************************************************************/

    if((target=open(filename,O_WRONLY|O_CREAT|O_TRUNC,0644))<0)
    { 
        perror("cant open or create file");
        exit(1);
    }

    while((k = read(sockfd,buf,sizeof(buf)))>0)
    {
        write(target,buf,k);
    }

    printf("\n*******succeed!******\n");

    close(sockfd);
    close(target);
}
/**************************************************************************************************************/

#include
#include
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define ServerPort 3333
#define MAXDATASIZE 1024
#define NAMESIZE 30

int main(int argc, char** argv){ 
    char buf[MAXDATASIZE],filename[NAMESIZE];
    int  target;
    register int k,sockfd;
    struct sockaddr_in serv_addr;
    struct hostent *hp;
/**************************************************************************************************************/
    if(argc!=2)
    {
        printf("Usage:\n");
        exit(1);
    }

    if(!(hp=gethostbyname(argv[1])))
    { 
        herror("gethostbyname failed!");
        exit(1);
    }

/**************************************************************************************************************/
    if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
    { 
        perror("sockfd failed!"); 
        exit(1);
    }

    serv_addr.sin_family = AF_INET; 
    serv_addr.sin_port = htons(ServerPort);

    bcopy(hp->h_addr,&serv_addr.sin_addr,hp->h_length);
    printf("connecting...\n\n");

    if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)
    {
        perror("cant connect server!");
        exit(1); 
    }

/**************************************************************************************************************/

    if((target=open(filename,O_WRONLY|O_CREAT|O_TRUNC,0644))<0)
    { 
        perror("cant open or create file");
        exit(1);
    }

    while((k = read(sockfd,buf,sizeof(buf)))>0)
    {
        write(target,buf,k);
    }

    printf("\n*******succeed!******\n");

    close(sockfd);
    close(target);
}
/**************************************************************************************************************/














 
阅读(717) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~