Socket远程执行命令并结果回传(服务端)

14 篇文章 0 订阅
  1. /*
  2. *服务器端,发送命令,等待结果回传
  3. * By rekken
  4. */
  5. #include <sys/types.h>
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8. #include <errno.h>
  9. #include <netinet/in.h>
  10. #include <sys/socket.h>
  11. #include <string.h>
  12. #include <netdb.h>
  13. #define SERVERPORT 3490
  14. int main(int argc,char *argv[])
  15. {
  16.         //scokfd:a socket descriptor, sendbytes and recvbytes used for send() and recv(),
  17.     int sockfd,sendbytes,recvbytes;
  18.     char recvdata[65535];        //store the data received
  19.     char i_return[65535];
  20.     char *p_return;
  21.     char *i_Command=argv[2];    //argv[2] store the file dir received from the keyboard
  22.     struct hostent *host;    //for dns transmition
  23.     struct sockaddr_in serv_addr;    //store the ip and other server info
  24.     if(argc<3){
  25.         fprintf(stderr,"Please enter AS: servername fileDirectory\n");
  26.         exit(1);
  27.     }
  28.         //address resolution function
  29.     if((host=gethostbyname(argv[1]))==NULL){
  30.         perror("gethostbyname");
  31.         exit(1);
  32.     }
  33.         //file directory not NULL
  34.     if(i_Command==NULL){
  35.         perror("file");
  36.         exit(1);
  37.     }
  38.         //create socket
  39.     if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
  40.         perror("socket");
  41.         exit(1);
  42.     }
  43.         //set relevant parameters in the socketr_in struct
  44.     serv_addr.sin_family=AF_INET;
  45.     serv_addr.sin_port=htons(SERVERPORT);
  46.     serv_addr.sin_addr=*((struct in_addr *)host->h_addr);
  47.     bzero(&(serv_addr.sin_zero),8);
  48.         //call the connect() function to connect to server intiative
  49.     if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1){
  50.         perror("connect");
  51.         exit(1);
  52.     }
  53.         //send message to sever
  54.     if((sendbytes=send(sockfd,i_Command,120,0))==-1){
  55.         perror("send");
  56.         exit(1);
  57.     }
  58.     printf("Send:%s\n",argv[2]);
  59.         //receive data
  60.         p_return=i_return;
  61.      while(1){
  62.         if((recvbytes=recv(sockfd,recvdata,65535,0))==-1){
  63.             perror("receive file:");
  64.             exit(1);
  65.         }
  66.         memcpy(p_return,recvdata,recvbytes);
  67.         p_return=p_return+recvbytes;
  68.         if(!recvbytes)
  69.             break;
  70.     };
  71.             printf("Receive data :%s",i_return);
  72.     close(sockfd);
  73.     return 1;
  74. }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值