当前位置: 技术问答>linux和unix
求大侠帮忙分析一个简单的socket程序。。
来源: 互联网 发布时间:2016-10-07
本文导语: 欲实现的功能如下:client从stdin读入一个shell命令(如date,ls这种有输出结果的命令),向server发送该命令,然后server执行命令后,将执行的结果返回给client,client再返回的结果打印出来。 源码如下: // server 端 #include...
欲实现的功能如下:client从stdin读入一个shell命令(如date,ls这种有输出结果的命令),向server发送该命令,然后server执行命令后,将执行的结果返回给client,client再返回的结果打印出来。
源码如下:
源码如下:
// server 端
#include "unp.h"
#include
#include
int
main(int argc, char **argv)
{
int listenfd, connfd;
struct sockaddr_in servaddr;
char buff[MAXLINE], line[MAXLINE];
time_t ticks;
int n=0, resue=1;
char end[4]="end";
char *ppp;
listenfd = Socket(AF_INET, SOCK_STREAM, 0);
setsockopt (listenfd,SOL_SOCKET,SO_REUSEADDR,&resue,sizeof(int));
FILE* fpin;
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(13); /* daytime server */
Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
Listen(listenfd, LISTENQ);
connfd = Accept(listenfd, (SA *) NULL, NULL);
while ((n =recv(connfd,buff,40,0))>0){
printf("%dn",n);
fflush(stdout);
buff[n]=0;// 很重要!!
if ((fpin = popen (buff,"r"))==NULL)
err_sys("popen error");
bzero(line,MAXLINE);
for (;;){
ppp= fgets(line,MAXLINE,fpin);
send(connfd,line,strlen(line),0);
if(ppp==NULL) // end作为传输的结束符。
{
ppp = "end";
send(connfd,ppp,strlen(ppp),0)
break;
}
}
if (pclose(fpin)==-1)
err_sys("pclose error");
// memset(buff,40,0);
}
Close(connfd);
exit(0);
}
// client 端
#include "unp.h"
int
main(int argc, char **argv)
{
int sockfd, n;
char recvline[100];
struct sockaddr_in servaddr;
char cmdstring[40];
if (argc != 2)
err_quit("usage: a.out ");
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0))