Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- int main(){
- //**********************************************************//
- //socket deklarációk, bind, listen
- int ellenor; //az ellenor változó a bind, listen, accept, send, recv fügvények visszatérési értékének tárolására szolgál
- int on = 1;
- int db = 2;
- int serversocket = socket (AF_INET, SOCK_STREAM, 0);
- struct sockaddr_in serveraddress;
- serveraddress.sin_family = AF_INET;
- serveraddress.sin_port = htons(52369);
- serveraddress.sin_addr.s_addr = INADDR_ANY;
- setsockopt(serversocket, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof on);
- setsockopt(serversocket, SOL_SOCKET, SO_KEEPALIVE, (char *)&on, sizeof on);
- ellenor = bind(serversocket, (struct sockaddr *) &serveraddress, sizeof(serveraddress));
- if(ellenor==-1){
- printf("Bind error, a szerver leáll!\n");
- exit(0);
- }
- ellenor = listen(serversocket, db);
- if(ellenor==-1){
- printf("Listen error, a szerver leáll!\n");
- exit(0);
- }
- puts("A szerver a játékosok csatlakozására vár!");
- //**********************************************************//
- //kliens deklarációk, csatlakozások fogadása
- int i=0;
- int kliensek[db], aktiv[db], status[db]; //a a tömbök azonos indexelésű elemei összetartoznak a
- char uzenet[1000]; //kliensek tömb a játĂ©kosokat tárolja, az aktĂv tömb azt
- //h melyik játékos van még játékban, a status tömb h melyik
- //játékos következik vagy h ki esett-e már -1 ha kiesett,
- //0 ha nem ő jön, 1 ha ő jön
- for(i; i<db; i++){ //a szerver sorban fogadja a csatlakozó játékosokat és elküldi hanyadikként csatlakoztak
- kliensek[i] = accept(serversocket, NULL, NULL);
- if(kliensek[i]==-1){
- printf("Accept error, a szerver leáll!\n");
- exit(0);
- }
- aktiv[i]=1;
- status[i]=0;
- printf("A(z) %d. számú játékos csatlakozott.\n", i+1);
- sprintf(uzenet, "%d", i+1);
- ellenor = send(kliensek[i], uzenet, sizeof(uzenet), 0);
- if(ellenor==-1){
- printf("Send error, a szerver leáll!\n");
- exit(0);
- }
- ellenor = recv(kliensek[i], &uzenet, sizeof(uzenet), 0);
- if(ellenor == -1){
- printf("Recive error, a szerver leáll! %d\n", ellenor);
- exit(0);
- }
- }
- //---------------------------------------------------------------------///
- //játék kezdése
- puts("A játékosok csatlakoztak, a játék elindul.");
- int j;
- int kezdes=1; //a kezdes változĂł Ă©rtĂ©ke amĂg nincs meg a kezdĹ‘szĂł
- char utolso[1000];
- while(1 < summa(aktiv, db)) //amĂg legalább 2 játĂ©kos van addig ismĂ©tlĹ‘dik a ciklus
- {
- for(int i=0; i<db; i++)
- {
- ellenor = send(kliensek[i], uzenet, sizeof(uzenet), 0);
- if(ellenor==-1){
- printf("Send error, a szerver leáll!\n");
- exit(0);
- }
- ellenor = recv(kliensek[i], &uzenet, sizeof(uzenet), 0);
- if(ellenor == -1){
- printf("Recive error, a szerver leáll!\n");
- exit(0);
- }
- //ide jön a kiértékelés
- }
- }
- //---------------------------------------------------------------------///
- //eredmények elküldése
- i = 888 //i értéke legyen a nyertes indexe
- for(j=0; j<db; j++){ //az i változĂł az itolsĂł aktĂv játĂ©kos indexĂ©t tartalmazza ezĂ©rt az utolsĂł ĂĽzenetben az i+1 számot kĂĽldi el
- sprintf(uzenet, "%d", i+1);
- ellenor = send(kliensek[j], uzenet, sizeof(uzenet), 0);
- if(ellenor==-1){
- printf("Send error, a szerver leáll!\n");
- exit(0);
- }
- ellenor = recv(kliensek[j], &uzenet, sizeof(uzenet), 0);
- if(ellenor == -1){
- printf("Recive error, a szerver leáll!\n");
- exit(0);
- }
- }
- printf("A(z) %d. számú játékos nyert\n", atoi(uzenet));
- //---------------------------------------------------------------------///
- //Lezárás
- puts("A szerver leáll!");
- for(i; i<db; i++)
- close(kliensek[i]);
- return 0;
- }
Add Comment
Please, Sign In to add comment