Problem z warunkiem w ifie

0

Witam.
Kazano mi napisać grę na zaliczenie i ją już tłukę któryś dzień w końcu prawie koniec a tu mi if-y źle sprawdzają czy mógłby ktoś sprawdzić mi kod:
Klient

#include <cstdlib>
#include <iostream>
#include<winsock2.h>
#define MY_PORT 2525
#define MY_ADDR "127.0.0.1"
using namespace std;

int main(int argc, char *argv[])
{
      cout<<"Klient- zabka"<<endl;
    WSADATA wsaData;
    int iResult;
    iResult= WSAStartup(MAKEWORD(2,2), &wsaData);
    if (iResult !=0)
    {
  cout<<"WSAStartup nie udane"<<iResult<<endl;
   return 1;
     }
   else
 cout<<" WSAStartup OK"<<endl;
                SOCKET KlientSocet=INVALID_SOCKET;
                KlientSocet= socket(PF_INET, SOCK_STREAM,0);
                if (KlientSocet==INVALID_SOCKET)
                {
                 cerr<<"Błąd w socet()"<<WSAGetLastError()<<endl;
                                                }
                else
                cout<<"Socet został utworzony"<<endl;
                
                struct sockaddr_in myaddr;
                myaddr.sin_family= PF_INET;
                myaddr.sin_port= htons(MY_PORT);
                myaddr.sin_addr.s_addr= inet_addr(MY_ADDR);
                memset (&(myaddr.sin_zero), '\0',8);
       iResult= connect(KlientSocet, (struct sockaddr*)&myaddr, sizeof(struct sockaddr));
       if (iResult==SOCKET_ERROR)
       {
                                 cerr<<"Błąd w connect"<<endl;
                                 closesocket(KlientSocet);
                                 WSACleanup();
                                 return 1;
                                 }
                                 else
                                 {
                                     cout<<"Connect się udał"<<endl;
                                 }
       char msg;;
    while(true)
    {

 while(true)
       {
       cout <<"1.papier \n2.kamien \n3.nozyce \ntwoj wybor to:";
       int licz; 
       cin>>licz;
       switch(licz)
       {
      case 1:{
       char msg[]="paier";
       int bytes_sent;
       bytes_sent= send(KlientSocet, msg, strlen(msg), 0);
       cout<<"Wysyłanie się powiodło\n";
       break;
      }
      case 2: {
       char msg[]="kamien";
       int bytes_sent;
       bytes_sent= send(KlientSocet, msg, strlen(msg), 0);
       cout<<"Wysyłanie się powiodło\n";
      break;
      }
      case 3:{
       char msg[]="nozyce";
       int bytes_sent;
       bytes_sent= send(KlientSocet, msg, strlen(msg), 0);
       cout<<"Wysyłanie się powiodło\n";
     break;
      }
      default:{
       
       cout<<"zly wybor";
      break;
      }}
{
 int numbytes;
char zwrot[255];

 if (SOCKET_ERROR == (numbytes=recv(KlientSocet, zwrot, 
255,
0)))
{cerr << "blad w recv: "<<WSAGetLastError()<<endl;
WSACleanup(); return 1;
}
else cout<<"odebrano: "<<zwrot<<endl;}
}}

       
        closesocket(KlientSocet);
       
                WSACleanup();
                
    system("PAUSE");
    return EXIT_SUCCESS;
}
 

Server:

 
#include <cstdlib>
#include <iostream>
#include <winsock2.h>
#define MY_PORT 2525
#define MY_ADDR "127.0.0.1"
#define BACKLOG 1
#define MAXDATASIZE 256
using namespace std;

int main(int argc, char *argv[])
{
//1. inicializacia bibilioteki winsock2 
cout<< "Servwer gniazda BOCIAN\n";
WSADATA wsaData;
int iResult;
// Inicializacia Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0)
{cout<< "WSAStartaup nie udane: "<<iResult<<endl; return 1;}
else cout<<"WSAStartup ok\n";


//2. utworzenie gniazda serwera 
SOCKET ServerSocket = INVALID_SOCKET;
ServerSocket = socket(PF_INET, SOCK_STREAM, 0);//DZIELNA, TYP, PROTOKOL
if(ServerSocket == INVALID_SOCKET)
{cerr <<"Blad w socket() serwera BOCIAN: " <<WSAGetLastError()<<endl; WSACleanup(); return 1;}
else {cout << "Socket() serweru Bocian dziala poprawnie"<<endl;};
//3. bindowanie adresow z gniazdem
struct sockaddr_in myaddr;
myaddr.sin_family = AF_INET ;
myaddr.sin_port = htons(MY_PORT);
myaddr.sin_addr.s_addr =  inet_addr(MY_ADDR);
memset (&(myaddr.sin_zero), '\0', 8 ); //resetowanie reszty struktury
if (SOCKET_ERROR == bind(ServerSocket, (struct sockaddr *)&myaddr, sizeof(struct sockaddr)))
{cerr << "Blad w bind()serwer BOCIAN: "<< WSAGetLastError() << endl;
WSACleanup(); return 1; } 
else {cout<<"Funkcia Bindowania serwera wystartowala poprawnie\n";};


//4. ustawienie serwera w stan nasłuchu
if(SOCKET_ERROR == listen(ServerSocket, BACKLOG))
{ cerr << "blad w listen()server BOCIAN : "<<WSAGetLastError()<<endl;
WSACleanup(); return 1;}
else { cout<<"Start Nasluhu serwera bocian wykonany poprawnie\n";};

cout << "Tu BOCIAN Czekam na sygnal ZABKI.. "<<endl;
//5. przyjecie polonczenia z klientem - utworzenie nowego gniazda 
while (true)
{//Jesli przychodzi nowe polaczenie - bedzie mialo swojhe gniazdo
SOCKET PolaczonySocket;
sockaddr_in klient_addr;// informacia o adresie osoby laczoncej sie
int sin_size;
PolaczonySocket = accept(ServerSocket, (sockaddr*)&klient_addr,
&sin_size);
if (PolaczonySocket == INVALID_SOCKET)
{cerr << "Blad w accept()server BOCIAN: " <<WSAGetLastError() <<endl; closesocket(ServerSocket);
WSACleanup(); return 1;}
else{ cout<<"Server Bocian Zakceptowal polaczenie\n";};
cout<< "Klient polaczony z adresu " << inet_ntoa(klient_addr.sin_addr);


cout <<" na porcie " << ntohs(klient_addr.sin_port) <<" ... ";
//6. odbior danych od klienta 
int numbytes;
char zwrot[MAXDATASIZE]={'\0'};
while(true)
{


//7. zamkniecie gniazda polonczeniowego svr
if (SOCKET_ERROR == (numbytes=recv(PolaczonySocket, zwrot, 
MAXDATASIZE-1,
0)))
{cerr << "blad w recv: "<<WSAGetLastError()<<endl;
WSACleanup(); return 1;
}
else cout<<"odebrano: "<<zwrot<<endl;

       cout <<"1.papier \n2.kamien \n3.nozyce \ntwoj wybor to:";
       int licz; 
       cin>>licz;
           char moja[MAXDATASIZE]={'\0'};
           switch(licz)
       {
      case 1:{
      char moja[]="paier";
       
      
       break;
      }
      case 2: {
       char moja[]="kamien";
       
      break;
      }
      case 3:{
      char moja[]="nozyce";
       
     break;
      }
      default:{
       
       cout<<"zly wybor";
      break;
      }}
      if((zwrot!="kamien" && moja!="papier") || (zwrot!="nozyce" && moja!="kamien") || (zwrot!="papier" && moja!="nozyce"))
      {
      char msg[]="przegrales";
      cout<<"wygrales"<<endl;
       int bytes_sent;
       bytes_sent= send(PolaczonySocket, msg, strlen(msg), 0);
       cout<<"Wysyłanie się powiodło\n";
      }else
      {
       if((zwrot!="papier" && moja!="kamien") || (zwrot!="kamien" && moja!="nozyce") || (zwrot!="nozyce" && moja!="papier")) 
      {
      char msg[]="wygrales";
      cout<<"przegrales"<<endl;
       int bytes_sent;
       bytes_sent= send(PolaczonySocket, msg, strlen(msg), 0);
       cout<<"Wysyłanie się powiodło\n";
      }else
      {
      if((zwrot!="papier" && moja!="papier") || (zwrot!="kamien" && moja!="kamien") || (zwrot!="nozyce" && moja!="nozyce"))
      {
      char msg[]="remis";
      cout<<"remis"<<endl;
       int bytes_sent;
       bytes_sent= send(PolaczonySocket, msg, strlen(msg), 0);
       cout<<"Wysyłanie się powiodło\n";
      }
      }
       
       }
//8. zamkniecie gniazda nasluchujacego svr
}
closesocket(PolaczonySocket);
}
//9. zwolnienie biblioteki winsock2
WSACleanup();
   
    system("PAUSE");
    return EXIT_SUCCESS;
}

Z góry dziękuję za pomoc

0

Ciągi tekstowe w stylu C porównujesz za pomocą strcmp, a nie operatora ==.
Dodatkowo w case'ach przysłaniasz zmiennymi tymczasowymi wcześniejszą deklarację. Tam wystarczy zwykły const char* i przypisywanie literałów (a raczej wskaźników na nie).

0

chyba nie zrozumiałem.
tak miałem na wykładach.
a możesz poprawić ten kod by działał. bo już nie mam sił z nim

1 użytkowników online, w tym zalogowanych: 0, gości: 1