Página 1 de 2 12 ÚltimoÚltimo
+ Responder ao Tópico



  1. #1
    honae
    PessoALL,

    estou tentado fazer com que um programa servidor execute um comando enviado por um programa cliente e retorne o resultado do comando para o cliente.

    o código do prograga servidor segue abaixo. Por enquanto ele só envia a mesma palavra que o cliente manda. Se alguém tiver alguma idéia, por favor me ajude.

    #include <unistd.h>
    #include <stdio.h>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <arpa/inet.h>
    #include <netinet/in.h>


    /* Global constants */
    #define SERV_UDP_PORT 6543
    #define SERV_TCP_PORT 6543
    #define SERV_HOST_ADDR "127.0.0.1"
    #define MAXLINE 512

    char *pname;



    int writen(fd, ptr, nbytes)
    register int fd;
    register char *ptr;
    register int nbytes;
    {
    int nleft, nwritten;



    nleft = nbytes;
    while (nleft > 0) {

    nwritten = write(fd, ptr, nleft);
    if (nwritten <= 0)
    return(nwritten);

    nleft -= nwritten;
    ptr += nwritten;
    }
    return(nbytes - nleft);
    }

    int readline(fd, ptr, maxlen)
    register int fd;
    register char *ptr;
    register int maxlen;
    {
    int n, rc;
    char c;



    for (n = 1; n < maxlen; n++) {
    if ((rc = read(fd, &c, 1)) == 1) {
    *ptr++ = c;
    if (c == '\n')
    break;
    } else if (rc == 0) {
    if (n == 1){
    return(0);
    }
    else
    break;
    } else{
    return(-1);
    }
    }

    *ptr = 0;

    return(n);
    }



    str_echo(sockfd)
    int sockfd;
    {
    int n;
    char *line;
    char * novo;

    line = malloc(MAXLINE * sizeof(char));

    for ( ; ; ) {
    n = readline(sockfd, line, MAXLINE);

    if (n == 0)
    return;
    else if (n < 0)
    printf("str_echo: readline error \n");
    if (writen(sockfd, line, n) != n)
    printf("str_echo: writen error \n");
    }
    }


    main(argc,argv)
    int argc;
    char *argv[];
    {
    int sockfd, newsockfd, clilen, childpid;
    struct sockaddr_in cli_addr,serv_addr;

    pname = argv[0];


    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
    printf("server: Não pode abrir o socket");
    exit(1);
    }

    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    serv_addr.sin_port = htons(SERV_TCP_PORT);

    bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));


    listen(sockfd, 5);

    for ( ; ; ) {
    clilen = sizeof(cli_addr);
    newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
    if (newsockfd < 0){
    printf("server: accept error \n");
    printf("newsockfd = %d \n", newsockfd);
    exit(1);
    }
    if ( (childpid = fork()) < 0)
    printf("server: fork error \n");
    if (childpid == 0) {
    close(sockfd);
    //sleep(3);
    str_echo(newsockfd);
    exit(0);
    }

    close(newsockfd);

    }
    }

  2. #2
    Edite seu post e coloque o código entre tags "CODE", assim ele ficará indentado.

    E olhando seu código por cima, notei o seguinte:

    Código :
    int writen(fd, ptr, nbytes)
    register int fd;
    register char *ptr;
    register int nbytes;
    {
        ...
    }

    Isto é um tanto ruim de ler, utilize assim:
    Código :
    int writen(int fd, char *ptr, int nbytes)
    { 
        ...
    }



  3. Desculpe, o post acima foi meu.

  4. #4
    xoomz
    Desculpe honae mas não entendi qual o problema que está enfrentando..



  5. #5
    honae
    Citação Postado originalmente por xoomz
    Desculpe honae mas não entendi qual o problema que está enfrentando..
    quero que esse pequeno programa funcione tipo um telnet.






Tópicos Similares

  1. Programação Visual em Sistemas Linux/UNIX
    Por Hawthorn no fórum Linguagens de Programação
    Respostas: 0
    Último Post: 10-12-2002, 13:49
  2. programação visual
    Por B4D_D0G no fórum Linguagens de Programação
    Respostas: 14
    Último Post: 27-11-2002, 13:27
  3. Programação
    Por B4D_D0G no fórum Linguagens de Programação
    Respostas: 8
    Último Post: 21-11-2002, 11:36
  4. sockets options
    Por no fórum Servidores de Rede
    Respostas: 0
    Último Post: 07-11-2002, 13:49
  5. Programação Web
    Por lalmeida no fórum Linguagens de Programação
    Respostas: 5
    Último Post: 26-09-2002, 08:00

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L