文章标题

来源:互联网 发布:加入淘宝客的要求 编辑:程序博客网 时间:2024/06/06 09:29

最近在学习TCP的知识,利用TCP协议在不同电脑间进行通信,同时结合之前学习的关于文件I/O方面的知识,解决文件通过网络进行复制的问题。
相比较于之前的程序是知识的一个综合,打开文件描述符,循环读写等,利用TCP中的send函数进行发送,另外一段进行解释并写。

#include "head.h"int main(int argc, const char *argv[]){    int sockfd,connfd;    char buf[64];    ssize_t n;    int fd2;  //通过终端输入需要写入内容的文件名    if(argc < 2){        perror("argc");        exit(1);    }//创建socket文件描述符    if((sockfd = socket(PF_INET,SOCK_STREAM,0)) == -1)    {        perror("socket");        exit(0);    }//打开文件,没有文件创建并清空内容        if( -1 == (fd2 = open(argv[1],O_WRONLY |O_CREAT|O_TRUNC,0664))){        perror("open");        return -1;    }    //填充地址、协议内容    struct sockaddr_in ser_addr,cli_addr;    memset(&ser_addr,0,sizeof(ser_addr));    ser_addr.sin_family = PF_INET;    ser_addr.sin_port = htons(50001);    ser_addr.sin_addr.s_addr = inet_addr("192.168.4.59");//绑定服务器端口号、IP地址    if(bind(sockfd,(struct sockaddr *)&ser_addr,sizeof(ser_addr)) == -1)    {        perror("bind");        exit(0);    }//监听    listen(sockfd,5);//接收从终端发送的请求并创建connfd,新的网络文件描述符    int cli_len = sizeof(cli_addr);    if((connfd = accept(sockfd,(struct sockaddr *)&cli_addr,&cli_len)) == -1)    {        perror("accept");        exit(1);    }    //接收从终端发送的内容,并写道打开并创建的文件中    memset(buf,0,sizeof(buf));    while(1)    {        if((n = recv(connfd,buf,sizeof(buf),0)) == -1)        {            perror("recv");            exit(1);        }        write(fd2,buf,n);        printf("n = %d\n",n);        printf("%s\n",buf);    }    return 0;}
0 0