基於tcp的簡單遠端併發控制系統

2021-08-08 19:45:02 字數 2196 閱讀 6767

編寫語言:c

編譯環境:linux    

老師布置了關於遠端控制系統的改進,使服務段與多個客戶端能夠併發通訊。在這個系統的操作中,客戶端連上服務端之後,向服務端傳送簡單的控制指令,服務端收到控制指令後,進行處理,並將處理結果返回給客戶端。

1.服務端**

#include#include#include#include0

#include#include#include#include#include#include#include #define portnumber 4500

//此函式的功能直接通過呼叫popen()函式實現,只是老師改進要求通過管道實現

void exec (char* command,char* true_result) //此函式實現popen()函式功能

close(fd[1]);//關閉fd[1]

wait(null);//使用wait()等待子程序

read(fd[0],result,2048 );將管道中的資料讀出

printf("%s\n",result);

strcpy(true_result,result);

}void work(int connectd)

recv_buf[recvnum-1]='\0'; //這裡要注意-1,不然會保留換行符

if (0==strcmp(recv_buf,"quit")||(0==strcmp(recv_buf,"quit")))

exec(recv_buf,send_buf);

rvalue=-1;

rvalue=send(connectd,send_buf,sizeof(send_buf),0);

}close(connectd);

}int main(void)

//填充套接字

bzero(&server_addr,sizeof(struct sockaddr_in));

server_addr.sin_family=af_inet;

server_addr.sin_addr.s_addr=htonl(inaddr_any);

server_addr.sin_port=htons(portnumber);

//繫結

if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)

//監聽

if(listen(sockfd,5)==-1)

sin_size=sizeof(struct sockaddr_in);

while(1)

//當客戶端連線時,呼叫fork()建立子程序與客戶端通訊

if( (childpid = fork()) == 0)//子程序建立

else if(childpid<0)

else

}close(sockfd);

return 0;

}

2.客戶端**

//客戶端為一般的tcp客戶端程式,不做解釋

#include#include#include#include#include#include#include#include#include#include#define port 4500 

int main()

bzero(&server_addr,sizeof(server_addr));

server_addr.sin_family=af_inet;

server_addr.sin_port=htons(port);

server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");

if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)

while(1)

recv(sockfd,recvbuffer,2048,0);

printf("the query result is :%s\n",recvbuffer);

}close(sockfd);

exit(0);

}

模擬乙個簡單的基於tcp的遠端關機程式

最近在學習unix網路程式設計,現在正在學習tcp的通訊。其實,只要建立起了tcp通訊,操作遠端的計算機就不是什麼問題了。正向telnet一樣,也是基於tcp ip協議的。所以這個實驗,也算是對telnet功能的一種簡單的模擬。但是,值得注意的問題是關機涉及到系統許可權,所以要給執行在server端...

基於Linux多執行緒的併發TCP服務

經過兩天的學習,終於做出來可以向指定客戶端傳送資料的tcp服務,寫本次博文的目的有二,一是將學習成果分享給正在學習tcp併發服務的同行,二是整理一下筆記,方便日後複習。首先說一下為什麼學習tcp併發服務,6個月前去面試嵌入式軟體工程師的面試題是 用兩個半小時的時間用任意語言編寫乙個可以兩個及兩個以上...

協程 基於TCP的高併發通訊

from gevent import monkey monkey.patch all from socket import import gevent defsever ipport s socket af inet,sock stream s.setsockopt sol socket,so re...