c语言socket 传输 大数据量

来源:互联网 发布:mac和手机 日历同步 编辑:程序博客网 时间:2024/06/06 08:26
[php] view plaincopy
  1. int server_sock,client_sock;  
  2.     socklen_t server_len,client_len;  
  3.     struct sockaddr_in server_address;  
  4.     struct sockaddr_in client_address;  
  5.     int result;  
  6.     fd_set readfds,testfds;  
  7.     server_sock=socket(AF_INET,SOCK_STREAM,0);  
  8.     server_address.sin_family=AF_INET;  
  9.     server_address.sin_port=htons(3334);  
  10.     server_address.sin_addr.s_addr=htonl(INADDR_ANY);  
  11.     server_len=sizeof(server_address);  
  12.     bind(server_sock,(struct sockaddr *)&server_address,server_len);  
  13.     listen(server_sock,5);  
  14.       
  15.     FD_ZERO(&readfds);  
  16.     FD_SET(server_sock,&readfds);  
  17.     while(1){  
  18.         char ch[20];  
  19.         char buffer[256];  
  20.         char block[1024];  
  21.         int fd,n;  
  22.         FILE *fp;  
  23.         int nread;  
  24.         time_t t;  
  25.         testfds=readfds;  
  26.         printf("server waiting/n");  
  27.         result=select(FD_SETSIZE,&testfds,(fd_set *)0,(fd_set *)0,(struct timeval *)0);  
  28.         if(result<1){  
  29.             perror("server5");  
  30.             exit(1);  
  31.         }  
  32.         for(fd=0;fd<FD_SETSIZE;fd++){  
  33.             if(FD_ISSET(fd,&testfds)){  
  34.                 if(fd==server_sock){  
  35.                   client_len = sizeof(struct sockaddr_in);  
  36.                   client_sock=accept(server_sock,(struct sockaddr *)&client_address,&client_len);  
  37.                   FD_SET(client_sock,&readfds);  
  38.                   printf("adding client on fd %d /n",client_sock);  
  39.                 }else{  
  40.                     ioctl(fd,FIONREAD,&nread);  
  41.                     if(nread==0){  
  42.                         close(fd);  
  43.                         FD_CLR(fd,&readfds);  
  44.                         printf("removing client on fd %d/n",fd);  
  45.                     }else{  
  46.                         n = read(fd,buffer,255);  
  47.                         if (n < 0)  
  48.                              printf("ERROR reading from socket");  
  49.                         printf("%s",buffer);  
  50.             //读取一个文件发送到客户端  
  51.                         fp=fopen("/home/wyt/test","r");  
  52.                         while(!feof(fp)){  
  53.                 //分段发送  
  54.                             fgets(block,sizeof(block),fp);  
  55.                             send(fd,block,sizeof(block),0);  
  56.                             //write(fd,block,sizeof(block));  
  57.                         }  
  58.                         fclose(fp);  
  59.                     }  
  60.                 }  
  61.             }  
  62.         }  
  63.     }  

以上是服务器端的程序

 

 

[cpp] view plaincopy
  1. //client1.cpp程序  
  2. #include <stdlib.h>  
  3. #include <stdio.h>  
  4. #include <stdlib.h>  
  5. #include <errno.h>  
  6. #include <string.h>  
  7. #include <sys/types.h>  
  8. #include <netinet/in.h>  
  9. #include <sys/socket.h>  
  10. #include <sys/wait.h>  
  11. #include <unistd.h>  
  12. #include <arpa/inet.h>  
  13. #include <time.h>  
  14. #include <iostream>  
  15. using namespace std;  
  16. int main(int argc, char** argv) {  
  17.     struct sockaddr_in address;  
  18.     int client_sock;  
  19.     char ch[20]="my name is client/0";  
  20.     int len,result;  
  21.     char in[5];  
  22.     int n,tmp;  
  23.     char buffer[1024];  
  24.     client_sock=socket(AF_INET,SOCK_STREAM,0);  
  25.     address.sin_addr.s_addr=inet_addr("127.0.0.1");    
  26.     address.sin_family=AF_INET;  
  27.     address.sin_port=htons(3334);  
  28.     len=sizeof(address);  
  29.     result=connect(client_sock,(struct sockaddr *)&address,len);  
  30.     if(result==-1){  
  31.         printf("error!");  
  32.         exit(-1);  
  33.     }  
  34.     n=write(client_sock,"abc/n",6);  
  35.     if(n<0){  
  36.         printf("error write/n");  
  37.     }  
  38.     bzero(buffer,1024);  
  39.    //进行循环读取数据     
  40.     while(tmp=recv(client_sock,buffer,sizeof(buffer),0)){  
  41.         if(tmp==-1) break;  
  42.         printf("%s",buffer);  
  43.     }  
  44.     exit(0);  
  45.     return (EXIT_SUCCESS);  
  46. }  

0 0
原创粉丝点击