https://blog.csdn.net/innobase/article/details/51302162服务端: /*************************************************************************        > File Name: srv.c        > Author: zhoulin        > Mail: 715169549@163.com        > Created Time: Sat 02 Jan 2016 04:39:53 PM EST ************************************************************************/#include#include#include#include#include#include#include#include#include#define  size 4096#define  port 6000#define  backlog  5int main(void) {    int sk;    int rsk;    struct sockaddr_in server;    struct sockaddr_in client;    char send_buf[size];    char recv_buf[size];        //open a socket    sk= socket(AF_INET,SOCK_STREAM,0); //建立socket    if(sk == -1) {        perror("socket");        return -1;    }        //seting server addr    memset((char *)&server,0,sizeof(server));    server.sin_family = AF_INET;    server.sin_addr.s_addr = htonl(INADDR_ANY);    server.sin_port =  port;    if(bind(sk, (struct sockaddr *)&server, sizeof(server)) == -1) { //绑定到指定的port上        perror("bind");        return -1;    }    if(listen(sk, backlog) == -1) { //监听服务端的端口        perror("listen");        return -1;    }    int len=sizeof(client);    printf("****************listen socket****************\n");    while(1) {        if((rsk = accept(sk,(struct sockaddr *)&client, &len))            perror("accept");            return -1;        }        fprintf(stdout,"Conencted from %s\n", inet_ntoa(client.sin_addr)); //输出连接到服务端的IP地址        printf("TCP>");        memset(send_buf,'\0',size);        fgets(send_buf, size, stdin); //输入命令        size_t slen=send(rsk, send_buf, strlen(send_buf), 0); //发送指正字节到客户端        size_t rlen=recv(rsk, recv_buf, size, 0); //接受来自客户端的信息        if(strncmp(recv_buf,"quit",4) == 0){  //如果收到的是是quit,则退出            break;        }        if(rlen > 0 ) { //重置接受信息的缓冲区            fprintf(stdout,"%s",recv_buf);            memset(recv_buf,'\0',size);        }    }    return 0;} 客户端 代码如下/*************************************************************************        > File Name: cli.c        > Author: zhoulin        > Mail: 715169549@163.com        > Created Time: Sat 02 Jan 2016 06:37:32 PM EST ************************************************************************/#include#include#include#include#include#include#include#include#include#include#define size 4096#define port 6000#define sleep_time 1int exec_command() {    int exec_flag=0;    char log[2048]={'\0'};    time_t c_now;    struct tm *c_tm_now;    time(&c_now);    c_tm_now=localtime(&c_now);    char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};    sprintf(log,"[%d-%d-%d %s %d:%d:%d] : ", (1900+c_tm_now->tm_year), (1+c_tm_now->tm_mon),\            c_tm_now->tm_mday,wday[c_tm_now->tm_wday], c_tm_now->tm_hour, c_tm_now->tm_min, c_tm_now->tm_sec);    char send_buf[size];    char recv_buf[size];    int skc = socket(AF_INET,SOCK_STREAM,0);    if(skc == -1){        perror("socket");        exec_flag=-1;        return exec_flag;    }    struct sockaddr_in saddr;    memset(&saddr,0,sizeof(saddr));    saddr.sin_family = AF_INET;    saddr.sin_port = port;    saddr.sin_addr.s_addr = inet_addr("192.168.100.10");    //connect a socket    if(connect(skc,  (struct sockaddr *)&saddr, sizeof(saddr))        perror("conenct");        exec_flag=-1;        return exec_flag;    }    FILE *fp = NULL;    size_t len = recv(skc,recv_buf,sizeof(recv_buf), 0);    if(len > 0) {        if(strncmp(recv_buf,"quit",4) == 0) {            strncpy(recv_buf,"quit",4);            memset(send_buf,'\0',size);            strncpy(send_buf,"quit",4);            send(skc,send_buf,size,0);            exec_flag=-1;            return exec_flag;        }        recv_buf[len] = '\0';        fp = popen(recv_buf, "r");        memset(send_buf, 0, size);        int rsize=fread(send_buf,1,size,fp);        if(rsize            strncpy(send_buf,"******execute command fail **********\n",size);        }        send(skc,send_buf,size,0);        strncpy(log+strlen(log),recv_buf,strlen(recv_buf));        printf("%s",log);        memset(recv_buf,'\0',size);        pclose(fp);        exec_flag = 0;    }    return exec_flag;}int main(void) {    while(1) {        if(exec_command() == -1){            break;        }        sleep(sleep_time);    }} 运行结果 :  服务端的输出:****************listen socket****************Conencted from 192.168.100.20TCP>pwd/home/zhoulin/socketConencted from 192.168.100.20TCP>ls -l -atotal 64drwxrwxr-x. 2 zhoulin zhoulin  4096 Jan  3 15:38 .drwx------. 4 zhoulin zhoulin  4096 Jan  3 15:38 ..-rw-rw-r--. 1 zhoulin zhoulin     0 Jan  2 22:48 1-rw-rw-r--. 1 zhoulin zhoulin     0 Jan  2 22:49 1.log-rwxrwxr-x. 1 zhoulin zhoulin  9839 Jan  3 15:38 cli-rw-rw-r--. 1 zhoulin zhoulin  2494 Jan  2 22:59 cli.c-rw-rw-r--. 1 zhoulin zhoulin 13483 Jan  2 16:12 sp-rw-rw-r--. 1 zhoulin zhoulin  2602 Jan  2 16:12 spair.c-rw-rw-r--. 1 zhoulin zhoulin 13546 Jan  2 22:54 srv-rw-rw-r--. 1 zhoulin zhoulin  1930 Jan  2 22:47 srv.cConencted from 192.168.100.20TCP>du /1512    /usr/lib64/nss/unsupported-tools4       /usr/lib64/nss/saved2216    /usr/lib64/nss68      /usr/lib64/pm-utils/sleep.d16      /usr/lib64/pm-utils/module.d32      /usr/lib64/pm-utils/bin8       /usr/lib64/pm-utils/power.d148     /usr/lib64/pm-utils140     /usr/lib64/libuser248     /usr/lib64/pango/1.6.0/modules252     /usr/lib64/pango/1.6.0256     /usr/lib64/pango76      /usr/lib64/traceevent/plugins80      /usr/lib64/traceevent56      /usr/lib64/gettext10276   /usr/lib64/atlas312     /usr/lib64/ibdiagnet1.5.7108     /usr/lib64/pygtk/2.0/demos/images588     /usr/lib64/pygtk/2.0/demos616     /usr/lib64/pygtk/2.0620     /usr/lib64/pygtk5008    /usr/lib64/ibdm1.5.7/ibnl5684    /usr/lib64/ibdm1.5.78       /usr/lib64/tk8.512      /usr/lib64/p11-kit48      /usr/lib64/libnfsidmap704     /usr/lib64/pkgconfig88      /usr/lib64/libfakeroot200     /usr/lib64/ldb/modules/ldb204     /usr/lib64/ldb/modules208     /usr/lib64/ldb392     /usr/lib64/ibdiagui1.5.716      /usr/lib64/apr-util-152      /usr/lib64/sssd/modules2076    /usr/lib64/sssd820     /usr/lib64/evolution-data-server-1.2/camel-providers1020    /usr/lib64/evolution-data-server-1.2/extensions1844    /usr/lib64/evolution-data-server-1.236      /usr/lib64/bonobo-2.0/samples40      /usr/lib64/bonobo-2.01512    /usr/lib64/graphviz/tcl2248    /usr/lib64/graphviz4       /usr/lib64/tcl8.560      /usr/lib64/perl5/Time268     /usr/lib64/perl5/B100     /usr/lib64/perl5/HTML12      /usr/lib64/perl5/DBI/Util84      /usr/lib64/perl5/DBI/Const/GetInfo96      /usr/lib64/perl5/DBI/Const20      /usr/lib64/perl5/DBI/Gofer/Transport16      /usr/lib64/perl5/DBI/Gofer/Serializer88      /usr/lib64/perl5/DBI/Gofer20      /usr/lib64/perl5/DBI/DBD28      /usr/lib64/perl5/DBI/SQL12      /usr/lib64/perl5/DBI/ProfileDumper664     /usr/lib64/perl5/DBI60      /usr/lib64/perl5/Compress/Raw108     /usr/lib64/perl5/Compress24      /usr/lib64/perl5/IO/Socket8       /usr/lib64/perl5/IO/Compress/Zip8       /usr/lib64/perl5/IO/Compress/Gzip16      /usr/lib64/perl5/IO/Compress/Zlib16      /usr/lib64/perl5/IO/Compress/Adapter28      /usr/lib64/perl5/IO/Compress/Base248     /usr/lib64/perl5/IO/Compress16      /usr/lib64/perl5/IO/Uncompress/Adapter272     /usr/lib64/perl5/IO/Uncompress628     /usr/lib64/perl5/IO12      /usr/lib64/perl5/gnu20      /usr/lib64/perl5/Filter/Util24      /usr/lib64/perl5/Filter12      /usr/lib64/perl5/Text24      /usr/lib64/perl5/threads36      /usr/lib64/perl5/Digest36      /usr/lib64/perl5/IPC4       /usr/lib64/perl5/machine8       /usr/lib64/perl5/DBD/SQLite24      /usr/lib64/perl5/DBD/Gofer/Policy44      /usr/lib64/perl5/DBD/Gofer/Transport72      /usr/lib64/perl5/DBD/Gofer308     /usr/lib64/perl5/DBD84      /usr/lib64/perl5/sys12      /usr/lib64/perl5/I18N36      /usr/lib64/perl5/Hash/Util56      /usr/lib64/perl5/Hash228     /usr/lib64/perl5/Devel3480    /usr/lib64/perl5/CORE100     /usr/lib64/perl5/asm4       /usr/lib64/perl5/5.10.0/x86_64-linux-thread-multi/CORE8       /usr/lib64/perl5/5.10.0/x86_64-linux-thread-multi12      /usr/lib64/perl5/5.10.020      /usr/lib64/perl5/PerlIO44      /usr/lib64/perl5/Data16      /usr/lib64/perl5/linux20      /usr/lib64/perl5/Unicode20      /usr/lib64/perl5/Encode/JP12      /usr/lib64/perl5/Encode/CN8       /usr/lib64/perl5/Encode/KR8       /usr/lib64/perl5/Encode/Unicode8       /usr/lib64/perl5/Encode/MIME/Header24      /usr/lib64/perl5/Encode/MIME184     /usr/lib64/perl5/Encode160     /usr/lib64/perl5/bits8       /usr/lib64/perl5/Scalar/Util20      /usr/lib64/perl5/Scalar40      /usr/lib64/perl5/asm-generic36      /usr/lib64/perl5/File8       /usr/lib64/perl5/Bundle8       /usr/lib64/perl5/Math/BigInt12      /usr/lib64/perl5/Math24      /usr/lib64/perl5/XML/Parser/Style300     /usr/lib64/perl5/XML/Parser/Encodings368     /usr/lib64/perl5/XML/Parser400     /usr/lib64/perl5/XML12      /usr/lib64/perl5/List/Util24      /usr/lib64/perl5/List16      /usr/lib64/perl5/MIME24      /usr/lib64/perl5/vendor_perl/Crypt/SSLeay44      /usr/lib64/perl5/vendor_perl/Crypt20      /usr/lib64/perl5/vendor_perl/Net44      /usr/lib64/perl5/vendor_perl/auto/Crypt/SSLeay48      /usr/lib64/perl5/vendor_perl/auto/Crypt52      /usr/lib64/perl5/vendor_perl/auto120     /usr/lib64/perl5/vendor_perl52      /usr/lib64/perl5/Sys24      /usr/lib64/perl5/auto/Time/Piece32      /usr/lib64/perl5/auto/Time/HiRes60      /usr/lib64/perl5/auto/Time152     /usr/lib64/perl5/auto/B20      /usr/lib64/perl5/auto/DynaLoader36      /usr/lib64/perl5/auto/NDBM_File44      /usr/lib64/perl5/auto/GDBM_File68      /usr/lib64/perl5/auto/DB_File20      /usr/lib64/perl5/auto/Cwd5du /Conencted from 192.168.100.20TCP>qui 客户端的执行日志:zhoulin@:~/socket:./cli[2016-1-3 Sun 15:38:38] : pwd[2016-1-3 Sun 15:38:43] : ls -l -a[2016-1-3 Sun 15:39:11] : du /————————————————版权声明:本文为CSDN博主「数据库码农」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/innobase/java/article/details/51302162
12-27 03:38
查看更多