Всем приветик!)))
обращаюсь ко всем кто может помочь, кто не может просьба не отписывать всякие подколки ;)
в общем мне надо написать простенькую программку:
"клиент принимает с клавиатуры команды и передает их серверу. сервер выполняет приянтые команды и возварщает результаты их выполнения клиента. принимаемые данные клиент выводит на терминао. программы запускать на разных терминалах"
пожалуйста помогите очень срочно надо!
>Всем приветик!)))
>обращаюсь ко всем кто может помочь, кто не может просьба не отписывать
>всякие подколки ;)
>в общем мне надо написать простенькую программку:
>"клиент принимает с клавиатуры команды и передает их серверу. сервер выполняет приянтые
>команды и возварщает результаты их выполнения клиента. принимаемые данные клиент выводит
>на терминао. программы запускать на разных терминалах"
>пожалуйста помогите очень срочно надо!Сессия подкралась незаметно?
Если уж Вы недостаточно образованы, чтобы написать, что то самой\самому, то хотя бы потрудитесь написать нормальное описание для программы.
>Сессия подкралась незаметно?
>Если уж Вы недостаточно образованы, чтобы написать, что то самой\самому, то хотя
>бы потрудитесь написать нормальное описание для программы.ну вобщем такое задание мне дали, как есть написала, если что то непонятно отвечу
ну а так... есть 2 терминала один клиент а другой сервер в клиенте вводятся простенькие команды типа ps -l они отсылаются на сервер там они выполняются и результаты возвращаются клиенту, принятые данные он выводит на терминал
Если я правильно понял вопрос, то выша задача описана на http://www.kgtu.runnet.ru/WD/TUTOR/tcpip/netprg1.html, надо немного поправить. А вообще в инете полно решений данной задачи, надо лишь поискать.
>Если я правильно понял вопрос, то выша задача описана на http://www.kgtu.runnet.ru/WD/TUTOR/tcpip/netprg1.html, надо
>немного поправить. А вообще в инете полно решений данной задачи, надо
>лишь поискать.ага )
putty <-> sshd
>>Сессия подкралась незаметно?
>>Если уж Вы недостаточно образованы, чтобы написать, что то самой\самому, то хотя
>>бы потрудитесь написать нормальное описание для программы.
>
>ну вобщем такое задание мне дали, как есть написала, если что то
>непонятно отвечу
>ну а так... есть 2 терминала один клиент а другой сервер
>в клиенте вводятся простенькие команды типа ps -l они отсылаются на
>сервер там они выполняются и результаты возвращаются клиенту, принятые данные он
>выводит на терминалУстанавливаете на сервере sshd.
На клиенте генерируете ключ для входа без пароля.
Ну и потом выполняете:
ssh <user>@<server> 'df -h'
Оформляете это в скрипт, который будет запрашивать команды."df -h" - в даном случае покажет свободное место. Подставляйте какие угодно команды.
>Устанавливаете на сервере sshd.
>На клиенте генерируете ключ для входа без пароля.Можно и без ключей, всавлять пароли expect-ом.
http://bash.cyberciti.biz/security/expect-ssh-login-script/
>пожалуйста помогите очень срочно надо!Советую посмотреть boost::aio
>Советую посмотреть boost::aioasio
Могу помочь. За некоторое вознаграждение ;-)
>Всем приветик!)))
>обращаюсь ко всем кто может помочь, кто не может просьба не отписывать
>всякие подколки ;)
>в общем мне надо написать простенькую программку:
>"клиент принимает с клавиатуры команды и передает их серверу. сервер выполняет приянтые
>команды и возварщает результаты их выполнения клиента. принимаемые данные клиент выводит
>на терминао. программы запускать на разных терминалах"
>пожалуйста помогите очень срочно надо!Вот сарцы: сервер :
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/wait.h>
#include <sys/types.h>
void
process_client(int nsfd)
{
int pid,di=0;
char input[1024];
FILE *p1;
pid = fork();
if(pid>0) return ;
if(pid<0) {perror(" fork() error"); return ; }// child
bzero(input, sizeof(input));
while(1)
{
char ch;
int rv;
rv = recv(nsfd, &ch, 1, 0);
if(rv<=0)
{
shutdown(nsfd, SHUT_RDWR);
close(nsfd);
exit(0);
}
if(ch=='\n') break;
input[di++] = ch;
}
p1 = popen(input, "r");
while(1)
{
char line[1024];
char *rptr;
int rv;
// read line from command
bzero(line, sizeof(line));
rptr = fgets(line, sizeof(line)-1, p1);
if(rptr == NULL) break;
// write line to socket
rv = send(nsfd, line, strlen(line),0);
if(rv<=0) break;
}
shutdown(nsfd, SHUT_RDWR);
close(nsfd);
exit(1);
}void
sig_chld_proc(int sig)
{
waitpid(-1, NULL, WNOHANG);
}int
main()
{
int sfd;
int rv;
struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons(1516);
local.sin_addr.s_addr = INADDR_ANY;
sfd = socket(AF_INET, SOCK_STREAM, 0);
if(sfd<0) {perror(" socket() error..."); exit(1); }
rv = 1;
setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &rv, sizeof(rv));
rv = bind(sfd, (void*)&local, sizeof(local));
if(rv< 0) { perror(" bind() error..."); exit(1); }
rv = listen(sfd, 5);
if(rv< 0) { perror(" listen() error..."); exit(1); }signal(SIGCHLD, sig_chld_proc);
while(1)
{
int nsfd;
nsfd = accept(sfd, NULL, NULL);
if(nsfd <0 ) { perror(" accept() error .. continue."); continue; }
process_client(nsfd);
close(nsfd);
}
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Клиент :
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>int
main()
{
int sfd;
struct sockaddr_in remote;
remote.sin_family = AF_INET;
remote.sin_port = htons(1516);
remote.sin_addr.s_addr = inet_addr("127.0.0.1");
while(1)
{
char * in_ptr = NULL;
int rv;
char input_buff[2048];
sfd = socket(AF_INET, SOCK_STREAM, 0);
if(sfd< 0) {perror(" socket() faield..."); exit(1); }
rv = connect(sfd, (void*)&remote, sizeof(remote));
if(rv< 0) { perror(" connect failed.."); exit(1); }
printf("Connected .. \n");
printf(" Input command #");
in_ptr = fgets(input_buff, sizeof(input_buff), stdin);
if(in_ptr == NULL ){
perror("fgets() failed...");
break;
}
printf("DBG: send cmd: %s", in_ptr);
rv = send(sfd, in_ptr, strlen(in_ptr), 0);
if(rv<0) {
perror("send faield... ");
break;
}
printf("DBG: %d bytes sent...\n", rv);
fflush(stdout);
while(1)
{
int rv;
char input_buffer[1024];
bzero(input_buffer, sizeof(input_buffer));
rv = recv(sfd, input_buffer, sizeof(input_buffer), 0);
if(rv<=0)
break;
puts(input_buffer);
}
fflush(stdout);
shutdown(sfd, SHUT_RDWR);
close(sfd);
}
return 0;
}