Tak jsem tu zase. Zkoušel jse se s tím poprat, ale stejně to nejde. Snažím se o to že první co přijde ze serveru je nějakej login a program má porovnat zda je to ve spravne formě a pokud ano tak teprve pokračovat dál. No a problém je pokud začnu používat funkci strcmp. pokud místo řádku dám jenom printf něco tak se vypis provede, ale pokud nechám to co zde mám, tzn. printf("%d", strcmp....) tak vysledek porovnani se mi vypiše až po tom co odešlu druhé data. Nějak nechápu v čom je problém. Pro jistotu dávám celý zdrojovy kod..
/*
* Server.c
*
* Created on: 24.10.2011
* Author: redby
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "LList.h"
void error(char *);
int main(int argc, char **argv) {
char buffer[1024];
char *temp;
struct list *USERS;
pid_t process;
struct sockaddr_in serv_adr, cli_adr;
int listenfd, sd_current, clilen;
if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
error("Unable to create socket.\n");
} else {
printf("Socket created.\n");
}
serv_adr.sin_family = AF_INET;
serv_adr.sin_addr.s_addr = INADDR_ANY;
serv_adr.sin_port = htons(1024);
if (bind(listenfd, (struct sockaddr*) &serv_adr, sizeof(serv_adr)) < 0) {
error("Unable to bind adress.\n");
close(listenfd);
exit(1);
} else {
printf("Client adress obtained.\n");
}
listen(listenfd, 5);
while (1) {
clilen = sizeof(cli_adr);
sd_current = accept(listenfd, (struct sockaddr*) &cli_adr, &clilen);
if (sd_current < 0) {
error("Unable to accept connection.\n");
} else {
printf("Connection established.\n");
}
process = fork();
if (process == 0) {
close(listenfd);
if (recv(sd_current, buffer, 255, 0) < 0) {
error("Unable to recieve data.\n");
} else {
printf("First Data recieved.\n");
}
printf("%d", strcmp("#LOGIN#", buffer));
while (1) {
if (recv(sd_current, buffer, 255, 0) < 0) {
error("Unable to recieve data.\n");
} else {
printf("Data recieved.\n");
}
if (send(sd_current, "OK", 5, 0) < 0) {
error("Unable to send data.\n");
} else {
printf("Data has been sent.\n");
}
}
} else {
close(sd_current);
}
}
close(listenfd);
return 0;
}
/**
* Vypis chybovych hlasek
*/
void error(char *message) {
printf("Error: %s", message);
}