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);
}
#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.