当前位置: 技术问答>linux和unix
telnet服务器把标准输出重定向到socket,传递给客户端再输出到屏幕
来源: 互联网 发布时间:2017-03-07
本文导语: 如题,我在用c语言实现telnent的服务器和客户端,现在服务器可以收到从客户端传送过来的命令,成功执行完命令以后,我想把执行的结果重定向到socket,并且通过socket传递给客户端,在客户端把结果输出到屏...
如题,我在用c语言实现telnent的服务器和客户端,现在服务器可以收到从客户端传送过来的命令,成功执行完命令以后,我想把执行的结果重定向到socket,并且通过socket传递给客户端,在客户端把结果输出到屏幕。有人教我怎么把输出结果通过socket传递到客户端并输出吗,万分感谢!
部分代码:
if (!fork()) //fork一个子进程处理从客户端收到的命令
{
//" use socket for stdin, stdout and stderr "
dup2(new_fd, 0);
dup2(new_fd, 1);
dup2(new_fd, 2);
//" change to the work directory "
chdir(dirroot);
//" run the shell commond of transmission from client "
char commPath[MAXBUF + 1];
sprintf(commPath, "/bin/%s", buf);
execl(commPath, buf, (char *)NULL);
}
在这已经可以成功在服务器端运行命令了。
现在已经重定义到socket了,如何传递给客户端呢?
send(new_fd, NULL, strlen(NULL), 0); //这样吗???
在客户端如何接受并在屏幕上显示结果呢?
在线急等
部分代码:
if (!fork()) //fork一个子进程处理从客户端收到的命令
{
//" use socket for stdin, stdout and stderr "
dup2(new_fd, 0);
dup2(new_fd, 1);
dup2(new_fd, 2);
//" change to the work directory "
chdir(dirroot);
//" run the shell commond of transmission from client "
char commPath[MAXBUF + 1];
sprintf(commPath, "/bin/%s", buf);
execl(commPath, buf, (char *)NULL);
}
在这已经可以成功在服务器端运行命令了。
现在已经重定义到socket了,如何传递给客户端呢?
send(new_fd, NULL, strlen(NULL), 0); //这样吗???
在客户端如何接受并在屏幕上显示结果呢?
在线急等
|
服务器:
dup2(sockfd, STDOUT_FILENO);
客户端:
read(sockfd, buffer, sizeof(buffer));
printf("%s", buffer);
这样就可以,当然具体细节要处理。
dup2(sockfd, STDOUT_FILENO);
客户端:
read(sockfd, buffer, sizeof(buffer));
printf("%s", buffer);
这样就可以,当然具体细节要处理。
|
已经重定向到socket了,那执行程序就可以了,它会自动把输出信息发送到与客户端的socket连接中
不用自己再调用send了
客户端正常读取socket中的内容就行了,read或recv
不用自己再调用send了
客户端正常读取socket中的内容就行了,read或recv
|
recv(fd, ...)
printf()
printf()