- /*
- *服务器端,发送命令,等待结果回传
- * By rekken
- */
- #include <sys/types.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <errno.h>
- #include <netinet/in.h>
- #include <sys/socket.h>
- #include <string.h>
- #include <netdb.h>
- #define SERVERPORT 3490
- int main(int argc,char
*argv[])
- {
- //scokfd:a socket descriptor, sendbytes
and recvbytes used
for send()
and recv(),
- int sockfd,sendbytes,recvbytes;
- char recvdata[65535]; //store the data received
- char i_return[65535];
- char *p_return;
- char *i_Command=argv[2]; //argv[2]
store the file dir received from the keyboard
- struct hostent *host; //for dns transmition
- struct sockaddr_in serv_addr; //store the ip
and other server info
- if(argc<3){
- fprintf(stderr,"Please enter AS: servername fileDirectory\n");
- exit(1);
- }
- //address resolution
function
- if((host=gethostbyname(argv[1]))==NULL){
- perror("gethostbyname");
- exit(1);
- }
- //file directory
not NULL
- if(i_Command==NULL){
- perror("file");
- exit(1);
- }
- //create socket
- if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
- perror("socket");
- exit(1);
- }
- //set relevant parameters
in the socketr_in struct
- serv_addr.sin_family=AF_INET;
- serv_addr.sin_port=htons(SERVERPORT);
- serv_addr.sin_addr=*((struct in_addr
*)host->h_addr);
- bzero(&(serv_addr.sin_zero),8);
- //call the connect()
function to connect
to server intiative
- if(connect(sockfd,(struct sockaddr
*)&serv_addr,sizeof(struct sockaddr))==-1){
- perror("connect");
- exit(1);
- }
- //send message
to sever
- if((sendbytes=send(sockfd,i_Command,120,0))==-1){
- perror("send");
- exit(1);
- }
- printf("Send:%s\n",argv[2]);
- //receive data
- p_return=i_return;
- while(1){
- if((recvbytes=recv(sockfd,recvdata,65535,0))==-1){
- perror("receive file:");
- exit(1);
- }
- memcpy(p_return,recvdata,recvbytes);
- p_return=p_return+recvbytes;
- if(!recvbytes)
- break;
- };
- printf("Receive data :%s",i_return);
- close(sockfd);
- return 1;
- }
Socket远程执行命令并结果回传(服务端)
最新推荐文章于 2025-05-23 17:39:41 发布