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