編寫語言: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...