23,116
社区成员
发帖
与我相关
我的任务
分享
// server 端
#include "unp.h"
#include <time.h>
#include <stdio.h>
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("%d\n",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 <IPaddress>");
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
err_sys("socket error");
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13); /* daytime server */
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
err_quit("inet_pton error for %s", argv[1]);
if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
err_sys("connect error");
while (fgets(cmdstring,40,stdin)!=NULL) {
if( write(STDOUT_FILENO,cmdstring,strlen(cmdstring))<0)
err_sys("write to stdout error");
send (sockfd, cmdstring, strlen(cmdstring),0);
for (;;) {
if ((n = recv(sockfd,recvline,MAXLINE,0))>0) {
recvline[n]=0; // 很重要
fputs(recvline,stdout);
if (!strncasecmp(recvline,"end",3)) // 判断数据是否接收完毕
break;
}
}
exit(0);
}
}
for (;;){
ppp= fgets(line,MAXLINE,fpin);
send(connfd,line,strlen(line),0);
if(ppp==NULL) // end作为传输的结束符。
{
ppp = "end";
send(connfd,ppp,strlen(ppp),0) // send end
break;
}
}