>Всем приветик!)))
>обращаюсь ко всем кто может помочь, кто не может просьба не отписывать
>всякие подколки ;)
>в общем мне надо написать простенькую программку:
>"клиент принимает с клавиатуры команды и передает их серверу. сервер выполняет приянтые
>команды и возварщает результаты их выполнения клиента. принимаемые данные клиент выводит
>на терминао. программы запускать на разных терминалах"
>пожалуйста помогите очень срочно надо! Вот сарцы: сервер :
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#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;
}