Code:
//cliet
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <unistd.h>
#include <errno.h>
//#include <glib.h>
int main()
{
int sockfd;
int len;
struct sockaddr_in address;
int result;
char ch[100];
char login[100];
char password[25];
struct balik {
int id_procesu;
int delka;
int poradi;
char data[1024];
} packet;
//printf("login %s", login);
sockfd = socket(AF_INET, SOCK_DGRAM, 0 );
address.sin_family = AF_INET;
address.sin_addr.s_addr = htonl(INADDR_ANY); //inet_addr( "127.0.0.1" );
address.sin_port = htons( 10001 );
len=sizeof( address );
// gets(ch); //scanf("%s", ch);
while (1)
{
printf("Zadejte login: "); scanf ("%s", login);
printf("Zadejte heslo: "); scanf ("%s", password);
strcat(login, ";");
strcat(login, password); //slouceni login a hesla se strednikem na kontrolu v souboru na serveru
strcpy(packet.data, login);
packet.delka = 15;
packet.id_procesu = 1;
printf( "%s\n", packet.data);
if (sendto(sockfd, (struct balik*)&packet , sizeof (packet),0,(struct sockaddr*)&address, len )==-1) // zaslani packetu s login na server
{
printf("chyba odeslani socketu");
}
recvfrom( sockfd, (struct balik*)&packet , sizeof (packet),0,(struct sockaddr*)&address, &len );
printf( "%s\n", packet.data);
if (strcmp(packet.data, "Chybny login nebo heslo!")==0) continue;
else break; break;
}
//while (1) {
recvfrom( sockfd, (struct balik*)&packet , sizeof (packet),0,(struct sockaddr*)&address, &len ); close(sockfd);
printf( "%s\n", packet.data);
printf( "%i\n", packet.id_procesu);
printf ("%d\n",strcmp(packet.data, "Jste prihlasen!"));
if (strcmp(packet.data, "Jste prihlasen!")==0)
{
strcpy(packet.data, "tady jsem");
sendto(sockfd, (struct balik*)&packet , sizeof (packet),0,(struct sockaddr*)&address, len );
}
//}
close(sockfd);
exit(1);
}
//server
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <unistd.h>
#include <netinet/in.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *f;
struct balik {
int id_procesu;
int delka;
int poradi;
char data[1024];
} packet;
int idproc;
char * pom;
char * pom1;
int server_sockfd,server_sockfd1, client_sockfd, n;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
struct sockaddr_in server_address1;
struct sockaddr_in client_address1;
server_sockfd = socket( AF_INET, SOCK_DGRAM, 0 );
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(10001);
server_len = sizeof( server_address );
if( bind( server_sockfd, ( struct sockaddr *)&server_address, server_len ) != 0 )
{
perror("Bind error!");
exit( 1 );
}
printf("Server ceka\n" );
printf("%d\n",getpid());
//while (1) {
int x=1;
while( 1 )
{
client_len = sizeof( client_address );
n = recvfrom(server_sockfd, (struct balik*)&packet, sizeof(packet), 0, (struct sockaddr*)&client_address, &client_len );
printf("prdel\n"); printf("%s\n", packet.data);printf("%d\n", packet.delka);printf("%d\n", packet.id_procesu);
if ((f = fopen("login.txt", "r")) == NULL)
{
printf ("Nepodarilo se otevrit soubor login.txt!");
fclose(f);
}
else
{
char log[40];
int c;
while ((c = getc(f) != EOF) )
{
fscanf(f, "%s", log);
//printf("%s\n", log);
if (strcmp(log,packet.data) ==0 )
{
x=0;
fclose(f);
printf("%d\n",getpid());
break;
}
}
if(x==1)
{
strcpy(packet.data, "Chybny login nebo heslo!");
n = sendto(server_sockfd, (struct balik*)&packet, sizeof(packet), 0, (struct sockaddr*)&client_address, client_len );
continue;
}
else
{
printf( "Pripojil se klient z: \n", inet_ntoa(client_address.sin_addr));
printf("%d\n",x);
break;
}
}
}
if (fork()!=0)
{
printf("toto je rodic %d\n",getpid());
}
else
{
server_sockfd1 = socket( AF_INET, SOCK_DGRAM, 0 );
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(10002);
server_len = sizeof( server_address);
client_len = sizeof( client_address );
if( bind( server_sockfd1, ( struct sockaddr *)&server_address, server_len ) != 0 )
{
perror("Bind error!");
exit( 1 );
}
printf("toto je potomek %d\n",getpid());
strcpy(packet.data, "Jste prihlasen!");
packet.id_procesu = 1;
n = sendto(server_sockfd1, (struct balik*)&packet, sizeof(packet), 0, (struct sockaddr*)&client_address, client_len );
n = recvfrom(server_sockfd1, (struct balik*)&packet, sizeof(packet), 0, (struct sockaddr*)&client_address, &client_len );
printf("%s\n", packet.data);
}
}