Linux socket編程

service.c

 

  1. #include<stdio.h> 
  2. #include<netinet/in.h> 
  3. #include<sys/socket.h> 
  4. #include<string.h> 
  5. #include<sys/types.h> 
  6. #include<sys/stat.h> 
  7. #include<fcntl.h> 
  8. #define PORT 3721 
  9.  
  10. int main() 
  11.     char ip[]="127.0.0.1";/*服務器ip地址*/ 
  12.     char msg[]="Connected,you can send cmd!\n";/*連接成功,發送給客戶端的信息*/ 
  13.     int buf[255],len;/*發送文件時使用*/ 
  14.   int sockfd,newfd;/*服務器套接字和連接產生的新套接字*/ 
  15.   int addrlen=sizeof(struct sockaddr_in);/*存儲網絡地址的結構體的大小*/ 
  16.   struct sockaddr_in seraddr,cliaddr;/*分別存放服務器和客戶端的網絡地址*/ 
  17.    
  18.   int fd;/*發送的文件標識*/ 
  19.    
  20.   /*創建套接字*/ 
  21.   sockfd=socket(AF_INET,SOCK_STREAM,0); 
  22.   if(sockfd<0) 
  23.     { 
  24.         printf("socket() error!\n"); 
  25.         exit(0); 
  26.     } 
  27.      
  28.   /*設置套接字要綁定的網絡地址,通過對結構體struct sockaddr_in seraddr賦值*/ 
  29.     seraddr.sin_family=AF_INET;/*協議族 爲ip協議族*/ 
  30.     seraddr.sin_port=PORT;/*端口號*/ 
  31.     inet_aton(ip,&(seraddr.sin_addr));/*將ip地址轉爲32位整數*/ 
  32.     memset(seraddr.sin_zero,0,8);/*填0*/ 
  33.      
  34.   /*綁定socket與網絡地址*/ 
  35.     if(bind(sockfd,&seraddr,sizeof(seraddr))<0) 
  36.         { 
  37.                 printf("bind() error!\n"); 
  38.         exit(0); 
  39.         } 
  40.   
  41.  /*服務器監聽客戶端連接*/ 
  42.     listen(sockfd,10); 
  43.      
  44.  /*連接,產生一個新的套接字newfd*/ 
  45.         if((newfd=accept(sockfd,&cliaddr,&addrlen))>=0) 
  46.                 { 
  47.            printf("A connect come from %s!\n",inet_ntoa(cliaddr.sin_addr));
  48. /*輸出客戶端ip地址*/ 
  49.                write(newfd,msg,100);//發生連接成功信息 
  50.                 } 
  51.      
  52.   /*發送文件*//*     
  53.     fd=open("01.pdf",O_RDONLY); 
  54.     if(fd<0) 
  55.         { 
  56.             perror("open error!\n"); 
  57.         } 
  58.         printf("Send file!\n"); 
  59.          
  60.         while((len=read(fd,buf,255))>0) 
  61.         { 
  62.             write(newfd,buf,len); 
  63.         } 
  64.   */ 
  65.    
  66.   close(sockfd);/*關閉*/ 

client.c

 

  1. #include<stdio.h> 
  2. #include<netinet/in.h> 
  3. #include<sys/socket.h> 
  4. #include<string.h> 
  5. #include<sys/types.h> 
  6. #include<sys/stat.h> 
  7. #include<fcntl.h> 
  8.  
  9. #define PORT 3721 
  10. int main() 
  11.     char ip[]="127.0.0.1";/*服務器ip*/ 
  12.     char buf[225]; 
  13.   int sockfd,fd,len; 
  14.   int addrlen=sizeof(struct sockaddr_in); 
  15.   struct sockaddr_in myaddr;/*客戶端套接字*/ 
  16.    
  17.   /*創建套接字*/ 
  18.   sockfd=socket(AF_INET,SOCK_STREAM,0); 
  19.   if(sockfd<0) 
  20.     { 
  21.         printf("socket() error!\n"); 
  22.         exit(0); 
  23.     } 
  24.      
  25.   /*要連接到的目標網絡地址,通過struct sockaddr_in設置*/ 
  26.     myaddr.sin_family=AF_INET;/*ip協議族*/ 
  27.     myaddr.sin_port=PORT;/*端口號*/ 
  28.     inet_aton(ip,&(myaddr.sin_addr)); 
  29.     memset(myaddr.sin_zero,0,8); 
  30.    
  31. /*連接sockfd與目標地址*/ 
  32.     if(connect(sockfd,&myaddr,addrlen)<0) 
  33.     { 
  34.         printf("can not connected!\n"); 
  35.         exit(0); 
  36.     } 
  37.     sleep(1); 
  38.  
  39. /*讀取信息*/ 
  40.     read(sockfd,buf,100); 
  41.      
  42.     printf("%s",buf);/*輸出*/ 
  43.      
  44.   /*接收文件*//*     
  45.      
  46.     fd=open("dest.pdf",O_APPEND|O_CREAT|O_RDWR,0666); 
  47.     if(fd<0) 
  48.         { 
  49.             perror("open error!\n"); 
  50.         } 
  51.         printf("Receive file!\n"); 
  52.         while((len=read(sockfd,buf,225))>0) 
  53.         { 
  54.             write(fd,buf,len); 
  55.             } 
  56.             */ 
  57.     close(sockfd);/*關閉*/ 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章