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