天天看點

linux網絡程式設計----發送與接收檔案

檔案的發送端:

#include <stdio.h>

#include <stdlib.h>

#include <sys/socket.h>

#include <sys/socket.h>

#include <netinet/in.h>

#define MAXSIZE 1024

int main()

{

    FILE *fp;

    int sockfd,recvfd;

    char buf[MAXSIZE];

    struct sockaddr_in my_addr;

    struct sockaddr_in remote_addr;

    socklen_t sin_size = sizeof(struct sockaddr_in);

    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)

    {

        perror("socket error");

        exit(-1);

    }

    my_addr.sin_family = AF_INET;

    my_addr.sin_port = htons(4444);

    my_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

    bzero(&(my_addr.sin_zero), 8);

    if(bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)

    {

        perror("bind error");

        exit(-1);

    }

    if(listen(sockfd, 10) == -1)

    {

        perror("listen error");

        exit(-1);

    }

    if((recvfd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1)

    {

        perror("accept error");

        exit(-1);

    }

    printf("sending data....\n");

    if((fp = fopen("/home/liumr/work-liumr/Pearl.Harbor.8.mp4","r")) == NULL)

    {

        printf("can't open file\n");

        exit(-1);

    }

    while(1)

    {

        if(fgets(buf, 100, fp) == NULL)

        {

            close(recvfd);

            close(sockfd);

            printf("send over\n");

            exit(-1);

        }

        if(send(recvfd, buf, 100, 0) == -1)

        {

            perror("send error");

            close(recvfd);

            exit(-1);

        }

        printf("send data!!\n");

        sleep(1);

    }

    close(fp);

    close(recvfd);

    close(sockfd);

}

檔案的接收端:

#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <string.h>

#define MAXSIZE 1024

int main(int argc, char **argv)

{

    int sockfd,recvbytes;

    char buf[MAXSIZE];

    FILE *fp;

    struct sockaddr_in serv_addr;

    if(argc < 2)

    {

        fprintf(stderr, "Please enter the server's ip\n");

        exit(-1);

    }

    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)

    {

        perror("socket error");

        exit(-1);

    }

    serv_addr.sin_family = AF_INET;

    serv_addr.sin_port = htons(4444);

    serv_addr.sin_addr.s_addr = INADDR_ANY;

    bzero(&(serv_addr.sin_zero), 8);

    if(connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)

    {

        perror("connect error");

        exit(-1);

    }

    if((fp = fopen("file.mp4","w")) == NULL)

    {

        printf("can't open file\n");

        exit(-1);

    }

    while(1)

    {

        memset(buf, 0, 100);

        recvbytes = recv(sockfd, buf, 100, 0);

        if(recvbytes == 0)

        {

            printf("receive over!!\n");

            close(fp);

            close(sockfd);

            exit(0);

        }

        printf("receive data!!\n");

        fprintf(fp,"%s",buf);

        sleep(1);

    }

    close(fp);

    close(sockfd);

    return 0;

}

繼續閱讀