Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Socket klijent - printf ne ispisuje sve linije

[es] :: C/C++ programiranje :: Socket klijent - printf ne ispisuje sve linije

[ Pregleda: 1034 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

VerbatimBOT
Aleksandar Dragosavac
Senior .NET Developer

Član broj: 84129
Poruke: 228
*.adsl-a-2.sezampro.rs.



Profil

icon Socket klijent - printf ne ispisuje sve linije03.06.2011. u 13:11 - pre 157 meseci
Pozdrav,
Našao sam neki primer za klijent/server aplikaciju koju treba da implementiram da razmenjuje neke poruke. Ovaj kod je malo izmenjen od originalnog, spakovao sam deo za komunikaciju u ovu sendMessage funkciju ali u principu je to to.
Problem je sledeći:
- kada pokrenem klijenta, on prosledi poruku i dobije odgovor, ali na kraju kada pokušam da ispišem ove tri linije, dobijem odgovor kao na slici (ne ispiše prvu liniju, nego ubaci ovaj "auth", s tim što ga substringuje od 1. karaktera).

Davno je bilo kada sam radio u C-u pa sam zaboravio i neke elementarne stvari, nadam se da nekome neće biti problem da uoči brzo gde je problem.

Code:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 

void sendMessage(int argc, char *argv[], char *message)
{
        
    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    char buffer[256];
    
    portno = atoi(argv[2]);
    
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
        
    if (sockfd < 0) 
        printf("ERROR opening socket");
        
    server = gethostbyname(argv[1]);
    
    if (server == NULL) {
        printf("ERROR, no such host\n");
        exit(0);
    }
    
    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    
    bcopy((char *)server->h_addr, 
         (char *)&serv_addr.sin_addr.s_addr,
         server->h_length);
         
    serv_addr.sin_port = htons(portno);
    
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
        printf("ERROR connecting");
        
    /*bzero(buffer,256);
    fgets(buffer,255,stdin);*/
    
    bzero(buffer,256);
    n = write(sockfd,message,strlen(message));
    
    if (n < 0) 
         printf("ERROR writing to socket");
         
    bzero(buffer,256);
    n = read(sockfd,buffer,255);
    
    if (n < 0) 
         printf("ERROR reading from socket");
         
    close(sockfd);
}

int main(int argc, char *argv[])
{
    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    char buffer[256];
    if (argc < 4) {
       printf("Usage \"%s hostname port auth\"\n", argv[0]);
       exit(0);
    }
    
    sendMessage(argc, argv, strcat("AUTH ", argv[3]));
    printf("msg 1\n");
    printf("msg 2\n");
    printf("msg 3\n");
    return (0);
}




Winners never quit, quitters never win.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Socket klijent - printf ne ispisuje sve linije

[ Pregleda: 1034 | Odgovora: 0 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.