Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //CLIENT ---------------------------
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <stdio.h>
- #include <netinet/in.h>
- #include <netinet/ip.h>
- #include <string.h>
- #include <unistd.h>
- #include <arpa/inet.h>
- #include <stdlib.h>
- int main(int argc, char* argvs[]) {
- if(argc != 3){
- printf("Este necesar ip-ul si portul!\n" );
- return 1;
- }
- int c,l;
- struct sockaddr_in server;
- char ip[20];
- strcpy(ip,argvs[1]);
- int port = atoi(argvs[2]);
- //VERIFICARI-------------------
- if(port<1024 || port>65535){
- printf("Portul nu convine!\n");
- return 1;
- }
- char verif[]="0123456789.";
- int i=0;
- for(i=0;i<strlen(ip);i++){
- if(strchr(verif,ip[i])==0){
- printf("Ip-ul nu convine!\n");
- return 1; //eroare
- }
- }
- //VERIFICARI------------------
- c = socket(AF_INET, SOCK_DGRAM, 0);
- if (c < 0) {
- printf("Eroare la crearea socketului client\n");
- return 1;
- }
- memset(&server, 0, sizeof(server));
- server.sin_port = htons(port);
- server.sin_family = AF_INET;
- server.sin_addr.s_addr = inet_addr(ip);
- l = sizeof(server);
- int ok =1; ok = htons(ok);
- sendto(c, &ok, sizeof(ok), 0, (struct sockaddr *) &server, sizeof(server));
- uint16_t greseli = 0;
- while(1){
- if(greseli >= 5) break;
- char sir_trimis[30],car_trimis,sir_primit[30],car_primit;
- i = 0;
- while(1){
- recvfrom(c, &car_primit, sizeof(car_primit), MSG_WAITALL, (struct sockaddr *) &server, &l);
- sir_primit[i] = car_primit; i++;
- if(car_primit == '\0') break;
- }
- recvfrom(c, &greseli, sizeof(greseli), MSG_WAITALL, (struct sockaddr *) &server, &l);
- greseli = ntohs(greseli);
- printf("%s %hu\n",sir_primit,greseli);
- printf("Introduceti sirul:");
- fgets(sir_trimis,sizeof(sir_trimis),stdin);
- strcpy(sir_trimis+strlen(sir_trimis)-1,sir_trimis+strlen(sir_trimis));
- i = 0;
- for(i = 0; i <= strlen(sir_trimis); i++){
- car_trimis = sir_trimis[i];
- sendto(c, &car_trimis, sizeof(car_trimis), 0, (struct sockaddr *) &server, sizeof(server));
- }
- }
- close(c); return 0;
- }
- //SERVER -----------------------------
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <stdio.h>
- #include <netinet/in.h>
- #include <netinet/ip.h>
- #include <string.h>
- #include <unistd.h>
- #include <arpa/inet.h>
- #include <stdlib.h>
- int main(int argc, char* argvs[]) {
- if(argc != 3){
- printf("Este necesar portul si un cuvant pentru joc!\n" );
- return 1;
- }
- int s,l;
- struct sockaddr_in server, client1, client2, client3;
- s = socket(AF_INET, SOCK_DGRAM, 0);
- //VERIFICARE --------
- int port = atoi(argvs[1]);
- if(port<1024 || port>65535){
- printf("Portul nu convine!\n");
- return 1;
- }
- //VERIFICARE --------
- if (s < 0) {
- printf("Eroare la crearea socketului server\n");
- return 1;
- }
- memset(&server, 0, sizeof(server));
- server.sin_port = htons(port);
- server.sin_family = AF_INET;
- server.sin_addr.s_addr = INADDR_ANY;
- if (bind(s, (struct sockaddr *) &server, sizeof(server)) < 0) {
- printf("Eroare la bind\n");
- return 1;
- }
- l = sizeof(server);
- int ok;
- recvfrom(s, &ok, sizeof(ok), MSG_WAITALL, (struct sockaddr *) &client1, &l);
- recvfrom(s, &ok, sizeof(ok), MSG_WAITALL, (struct sockaddr *) &client2, &l);
- recvfrom(s, &ok, sizeof(ok), MSG_WAITALL, (struct sockaddr *) &client3, &l);
- printf("S-au conectat toti clientii! Jocul incepe!\n");
- uint16_t greseli1 = 0,greseli2 = 0, greseli3 = 0,greselitotale =0;
- char cuvant_ghicit[30];
- strcpy(cuvant_ghicit,argvs[2]);
- while(1){
- char car1, car2, car3, sir1[30], sir2[30], sir3[30], car_t; int i;
- //CLIENT 1
- for(i = 0; i <= strlen(cuvant_ghicit); i++){
- car_t = cuvant_ghicit[i];
- sendto(s, &car_t, sizeof(car_t), 0, (struct sockaddr *) &client1, sizeof(client1));
- }
- greseli1 = htons(greseli1);
- sendto(s, &greseli1, sizeof(greseli1), 0, (struct sockaddr *) &client1, sizeof(client1));
- greseli1 = ntohs(greseli1);
- i = 0;
- while(1){
- recvfrom(s, &car1, sizeof(car1), MSG_WAITALL, (struct sockaddr *) &client1, &l);
- sir1[i] = car1; i++;
- if(car1 == '\0') break;
- }
- printf("%s\n",sir1 );
- if(cuvant_ghicit[strlen(cuvant_ghicit)-1] == sir1[1]
- && cuvant_ghicit[strlen(cuvant_ghicit)-2] == sir1[0]){
- strcpy(cuvant_ghicit,sir1);
- }
- else{
- greseli1 ++;greselitotale++;
- }
- //CLIENT 2
- for(i = 0; i <= strlen(cuvant_ghicit); i++){
- car_t = cuvant_ghicit[i];
- sendto(s, &car_t, sizeof(car_t), 0, (struct sockaddr *) &client2, sizeof(client2));
- }
- greseli2 = htons(greseli2);
- sendto(s, &greseli2, sizeof(greseli2), 0, (struct sockaddr *) &client2, sizeof(client2));
- greseli2 = ntohs(greseli2);
- i = 0;
- while(1){
- recvfrom(s, &car2, sizeof(car2), MSG_WAITALL, (struct sockaddr *) &client2, &l);
- sir2[i] = car2; i++;
- if(car2 == '\0') break;
- }
- printf("%s\n",sir2 );
- if(cuvant_ghicit[strlen(cuvant_ghicit)-1] == sir2[1]
- && cuvant_ghicit[strlen(cuvant_ghicit)-2] == sir2[0]){
- strcpy(cuvant_ghicit,sir2);
- }
- else{
- greseli2 ++;greselitotale++;
- }
- //CLIENT 3
- for(i = 0; i <= strlen(cuvant_ghicit); i++){
- car_t = cuvant_ghicit[i];
- sendto(s, &car_t, sizeof(car_t), 0, (struct sockaddr *) &client3, sizeof(client3));
- }
- greseli3 = htons(greseli3);
- sendto(s, &greseli3, sizeof(greseli3), 0, (struct sockaddr *) &client3, sizeof(client3));
- greseli3 = ntohs(greseli3);
- i = 0;
- while(1){
- recvfrom(s, &car3, sizeof(car3), MSG_WAITALL, (struct sockaddr *) &client3, &l);
- sir3[i] = car3; i++;
- if(car3 == '\0') break;
- }
- printf("%s\n",sir3 );
- if(cuvant_ghicit[strlen(cuvant_ghicit)-1] == sir3[1]
- && cuvant_ghicit[strlen(cuvant_ghicit)-2] == sir3[0]){
- strcpy(cuvant_ghicit,sir3);
- }
- else{
- greseli3 ++;greselitotale++;
- }
- if(greselitotale>=15) break;
- if(greseli1 >= 5||greseli2 >= 5||greseli3 >= 5){
- greseli1 = 5; greseli2 =5; greseli3 = 5;
- }
- }
- close(s);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement