/* tcpsrv.c -- TCP server */ #include #include #include #include #include #include "sock.h" #define MAXHOSSZ 80 char jelek[4] = "XO_"; int sock[2]; int err, flags=0; // char state[15] = "______________"; char *state = "______________"; int aktpl; void nextturn(int player) { char imsg[MAXHOSSZ]=""; sprintf(imsg, "s:%s", state); err = send( sock[player], imsg, strlen(imsg)+1, flags); if(err<0){ error("%s: Cannot send to server\n", "Server"); exit(3); } } void sendmsg(char* msg, int player) { char imsg[MAXHOSSZ]=""; sprintf(imsg, "m:%s", msg); err = send( sock[player], imsg, strlen(imsg)+1, flags); if(err<0){ error("%s: Cannot send to server\n", "Server"); exit(3); } } void parsecmd(char s[MAXHOSSZ]){ int i; char *d; char p; d = strtok(s, ":"); if (strcmp(d, "l") == 0) { i = atoi(strtok(NULL, ":")) - 1; printf("x: %d\n", i); p = state[i]; printf("y\n"); if (state[i] != '_') { printf("z\n"); sendmsg("Ervenytelen lepes\n", aktpl); nextturn(aktpl); } else { state[atoi(strtok(NULL, ":"))-1] = jelek[aktpl]; sendmsg(state, aktpl); aktpl=1-aktpl; nextturn(aktpl); } } } main( int argc, char** argv ){ /* arg count, arg vector */ /************* A hálózathoz szükséges deklarációk ***************/ int fd; /* socket endpt, rcv flags */ struct sockaddr_in server; /* socket name (addr) of server *//*cím család, port szám, internet cím*/ int server_size = sizeof server;/* length of the socket addr. server */ struct sockaddr_in client; /* socket name of client */ int client_size = sizeof client;/* length of the socket addr. client */ char buffer[BUFSIZE]; /* datagram dat buffer area */ int bytes=BUFSIZE; /* length of buffer */ int on = 1; /************************ Start program *************************/ char sztring[BUFSIZE]; char recbuf[MAXHOSSZ]; int kesz=0; aktpl=0; WSADATA wsaData; if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) { fprintf(stderr, "WSAStartup failed.\n"); system("pause"); exit(1); } server.sin_family = AF_INET; /* INet protokol család */ server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons(PORT_NO); /* portszám */ fd = socket(AF_INET, SOCK_STREAM, 0 ); if(fd<0){ error("%s: Socket creation error\n",argv[0]); exit(1); } setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof on); setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (char *)&on, sizeof on); err = bind( fd, (struct sockaddr *) &server, server_size); if(err<0){ error("%s: Cannot bind to the socket\n",argv[0]); exit(2); } err = listen( fd, 10); if(err<0){ error("%s: Cannot listen to the socket\n",argv[0]); exit(3); } /* Elso kliens */ sock[0] = accept(fd, (struct sockaddr *) &client, &client_size); if(sock[0]<0){ error("%s: Cannot accept on socket\n",argv[0]); exit(4); } sendmsg("Varunk a masik jatekosra\n", 0); /* Masodik kliens */ sock[1] = accept(fd, (struct sockaddr *) &client, &client_size); if(sock[1]<0){ error("%s: Cannot accept on socket\n",argv[0]); exit(4); } sendmsg("A jatek elkezdodott\n", 0); sendmsg("A jatek elkezdodott\n", 1); /************** Jatek kod *****************/ nextturn(aktpl); do { if (kesz==1) break; err = recv( sock[aktpl], recbuf, bytes, flags ); if(err<0){ error("%s: Cannot receive from the socket\n",argv[0]); exit(5); } else { parsecmd(recbuf); }; // aktpl=1-aktpl; } while (1==1); close(sock[0]); close(sock[1]); close(fd); return 0; }