Chinaunix首页 | 论坛 | 博客
  • 博客访问: 106518
  • 博文数量: 74
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 757
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-20 22:42
个人简介

相信生命中的无限潜能

文章分类

全部博文(74)

文章存档

2016年(1)

2015年(30)

2014年(30)

2013年(13)

我的朋友

分类: C/C++

2014-02-26 13:51:23


  1. //接收方
  2. #include <stdio.h>
  3. #include <fcntl.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <stdlib.h>
  7. #include <unistd.h>
  8. #include <string.h>
  9. #include <arpa/inet.h>
  10. int main()
  11. {
  12.     int sfd;int cfd; int ffd;
  13.     int r;
  14.     int len;
  15.     char buf[128];
  16.     char filename[100];/*要读取的文件名*/
  17.     struct sockaddr_in dr;
  18.     /*建立服务器socket*/
  19.     sfd = socket(AF_INET,SOCK_STREAM,0);
  20.     if(sfd==-1)printf("socket error:%m\n"),exit(-1);
  21.     printf("建立服务器成功!\n");
  22.     /*绑定IP地址与端口*/
  23.     dr.sin_family = AF_INET;
  24.     dr.sin_port = htons(9988);
  25.     dr.sin_addr.s_addr=inet_addr("192.168.1.162");/*转换成32为网络字节序*/
  26.     r = bind(sfd,(struct sockaddr*)&dr,sizeof(dr));
  27.     if(r==-1)printf("bind faild...\n"),exit(-1);
  28.     printf("bind OK\n");
  29.     /*监听*/
  30.     r = listen(sfd,10);
  31.     if(r==-1)printf("listen:%m\n"),exit(-1);
  32.     printf("listen OK\n");
  33.     /*接收连接*/
  34.     cfd = accept(sfd,0,0);
  35.     if(cfd==-1)printf("accpet error:%m\n"),exit(-1);
  36.     printf("开始接收文件");
  37.     /*接收文件名*/
  38.     r = recv(cfd,&len,sizeof(len),MSG_WAITALL);
  39.     r = recv (cfd,filename,len,MSG_WAITALL);
  40.     filename[len] = 0;
  41.     /*创建文件*/
  42.     ffd = open(filename,O_RDWR|O_CREAT|0666);
  43.     /*循环接收文件数据*/
  44.     while(1)
  45.     {
  46.         r = recv(cfd,&len,sizeof(len),MSG_WAITALL);
  47.         if(len==0)break;
  48.         r = recv(cfd,buf,len,MSG_WAITALL);
  49.         write(ffd,buf,len);
  50.     }
  51.     close(ffd);
  52.     close(cfd);
  53.     close(sfd);
  54.     printf("接收完毕");
  55.     return 0;
  56. }

  1. //传送方
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <netinet/in.h>
  6. #include <string.h>
  7. #include <sys/socket.h>
  8. #include <arpa/inet.h>
  9. #include <fcntl.h>
  10. int main()
  11. {
  12.     int sfd;/*socket 描述符*/
  13.     int ffd;/*文件描述符*/
  14.     int r;
  15.     int size;
  16.     int len;
  17.     char buf[128];
  18.     struct sockaddr_in dr;
  19.     char filename[]="demo.c";/*文件名*/
  20.     /*建立socket*/
  21.     sfd = socket(AF_INET,SOCK_STREAM,0);
  22.     if(sfd==-1) printf("socket err:%m\n"),exit(-1);
  23.     printf("socket OK...\n");
  24.     /*连接到服务器*/
  25.     dr.sin_family = AF_INET;
  26.     dr.sin_port = htons(9988);
  27.     inet_aton("192.168.1.162",&dr.sin_addr);/*将字符串的IP地址转换成网络序的地址*/
  28.     r = connect(sfd,(struct sockaddr*)&dr,sizeof(dr));/*建立与一个端的连接*/
  29.     if(r==-1) printf("connect err:%m\n"),exit(-1);
  30.     printf("connect OK...\n");
  31.     /*打开文件*/
  32.     ffd = open(filename,O_RDONLY);
  33.     if(ffd==-1)printf("open faild...\n"),exit(-1);
  34.     printf("open file OK...\n");
  35.     /*发送文件名*/
  36.     len = strlen(filename);
  37.     r = send(sfd,&len,sizeof(len),0);
  38.     r = send(sfd,filename,len,0);
  39.     if(r==-1) printf("send err:%m\n"),exit(-1);
  40.     printf("发送数据成功!\n");
  41.     /*循环发送数据*/
  42.     while(1)
  43.     {
  44.         size = read(ffd,buf,128);
  45.         if(size==-1) break;
  46.         if(size==0) break;/*文件末尾*/
  47.         if(size>0)
  48.         {
  49.             /*send()用于向一个已经连接的socket发送数据,如果无错误,返回值为所发送数据的总数,否>则返回SOCKET_ERROR。*/
  50.             r = send(sfd,&size,sizeof(size),0);/*发送数据长度send(描述符,待发送数据缓冲区,缓冲区
  51. 数据长度,调用执行方式)*/
  52.             if(r==-1)break;
  53.             r = send(sfd,buf,size,0);/*发送数据*/
  54.             if(r==-1)break;
  55.         }
  56.     }
  57.     size = 0;
  58.     r = send(sfd,&size,sizeof(size),0);
  59.     close(ffd);
  60.     close(sfd);
  61.     printf("OK\n");
  62.     /*读取到文件尾,发送大小为0的数据包*/

  63.     return 0;
  64. }


阅读(1093) | 评论(0) | 转发(0) |
0

上一篇:recvfrom

下一篇:inet_pton函数

给主人留下些什么吧!~~