Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //////KLIENT
- //o nawiązanie połączenia z serwerem,
- //o uzyskanie identyfikatora sesji,
- //o przesłanie pojedynczej liczby L,
- //o przesyłanie wartości liczbowych, będących „odpowiedziami” :
- //o klient ma odgadnąć liczbę wylosowaną przez serwer.
- //o zakończenie połączenia.
- #pragma comment(lib,"ws2_32.lib")
- #pragma warning(disable : 4996)
- #include <WinSock2.h>
- #include <iostream>
- #include <ctime>
- #include <cstdlib>
- #include <string>
- using namespace std;
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- int bin_int(const string &s) {
- int a = 0;
- int p = 1;
- for (int i = s.size() - 1; i >= 0; i--) {
- if (s[i] == '1') a = a + p;
- p = p * 2;
- }
- return a;
- }
- string int_bin(const int &a) {
- int a2 = a;
- string s = "";
- for (; a2>0;) {
- if (a2 % 2 == 0) {
- a2 = a2 / 2;
- s = s + "0";
- }
- else {
- a2 = a2 / 2;
- s = s + "1";
- }
- }
- string wynik = "";
- for (int i = s.size() - 1; i >= 0; i--) wynik = wynik + s[i];
- return wynik;
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void pakowanie(char pakiet[15], int &OPERA, int &OD1, int &OD2, int &ID) {//tablica-zawsze działa na oryginale
- int a = OPERA;
- int i = 0;
- for (; a > 0; i++) {
- if (a % 2 == 0) {
- a = a / 2;
- pakiet[15 - i] = '0';
- }
- else {
- a = a / 2;
- pakiet[15 - i] = '1';
- }
- }
- a = OD1;
- for (; a > 0; i++) {
- if (a % 2 == 0) {
- a = a / 2;
- pakiet[15 - i] = '0';
- }
- else {
- a = a / 2;
- pakiet[15 - i] = '1';
- }
- }
- a = OD2;
- for (; a > 0; i++) {
- if (a % 2 == 0) {
- a = a / 2;
- pakiet[15 - i] = '0';
- }
- else {
- a = a / 2;
- pakiet[15 - i] = '1';
- }
- }
- a = ID;
- for (; a > 0; i++) {
- if (a % 2 == 0) {
- a = a / 2;
- pakiet[15 - i] = '0';
- }
- else {
- a = a / 2;
- pakiet[15 - i] = '1';
- }
- }
- }
- void odpakowanie(char pakiet[15], int &OPERA, int &OD1, int &OD2, int &ID) {//tablica-zawsze działa na oryginale
- int a = 0;
- int p = 1;
- for (int i = 5; i >=0; i++) {
- if (pakiet[i] == 1) {
- a = a + p;
- p = p * 2;
- }
- }
- OPERA = a;
- a = 0;
- p = 1;
- for (int i = 8; i >= 6; i++) {
- if (pakiet[i] == 1) {
- a = a + p;
- p = p * 2;
- }
- }
- OD1 = a;
- a = 0;
- p = 1;
- for (int i = 11; i >= 9; i++) {
- if (pakiet[i] == 1) {
- a = a + p;
- p = p * 2;
- }
- }
- OD2 = a;
- a = 0;
- p = 1;
- for (int i = 14; i >= 12; i++) {
- if (pakiet[i] == 1) {
- a = a + p;
- p = p * 2;
- }
- }
- ID = a;
- }
- void zerowanie(char pakiet[15]) {
- for (int i = 0; i < 15; i++) {
- pakiet[i] = 0;
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- int main() {
- char pakiet[15];
- zerowanie(pakiet);
- int OPERA=0;
- int OD1=0;
- int OD2=0;
- int ID=0;
- srand(time(NULL));
- ///Winsock Start
- WSAData wsaData;
- WORD DLLVersion = MAKEWORD(2, 1);
- if (WSAStartup(DLLVersion, &wsaData) != 0) ///jesli jest error
- {
- MessageBoxA(NULL, "Winsock startup failed", "Error", MB_OK | MB_ICONERROR);
- exit(1);
- }
- SOCKADDR_IN addr; ///Adresy socketow
- int sizeofaddr = sizeof(addr); //wielkosc adresow
- addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //localhost (ten pc)
- addr.sin_port = htons(1111); //Port
- addr.sin_family = AF_INET; //IPv4 Socket (mozna dac 6)
- SOCKET Connection = socket(AF_INET, SOCK_STREAM, NULL); //stawiamy socketa
- if (connect(Connection, (SOCKADDR*)&addr, sizeofaddr) != 0) //jesli sie nie udalo
- {
- MessageBoxA(NULL, "Failed to Connect", "Error", MB_OK | MB_ICONERROR);
- return 0;
- }
- std::cout << "Connected!" << std::endl;
- recv(Connection, (char*)&L3, sizeof(L3), NULL); /// identyfikator
- odpakowanie(pakiet, OPERA, OD1, OD2, ID);////rozpakujemy identyfikator (na chuj nam on?) -> pewnie tak po prostu żeby ładnie to wyglądało (może to ma być tak teoretycznie jakbyśmy mieli utworzyć pare sesji?)
- //odpowiednie wykorzystanie OPERA, OD1, OD2, ID
- cout << "Prosze podac liczbe" << endl;
- int L1;
- cin >> L1;
- //odpowiednie ustawienie wartości OPERA, OD1, OD2, ID
- pakowanie(pakiet, OPERA, OD1, OD2, ID);///pakujemy liczbe
- send(Connection, (char*)&L1, sizeof(L1), NULL); /////// wysylamy Liczbe
- //////odbieramy przedział. Jeden czy dwa? <--No dwa co nie :D po to robiłem to dodatkowe pole OD2
- recv(Connection, (char*)&L3, sizeof(L3), NULL);
- odpakowanie(pakiet, OPERA, OD1, OD2, ID);///wypakować przedział
- //odpowiednie wykorzystanie pól OPERA, OD1, OD2, ID
- boolean traf = 0;
- while (traf == 0) {
- cout << "Przedzial liczbowy wynosi: " << min << " - " << max << endl << "Prosze podac strzelana liczbe" << endl;
- cin >> L1;
- //odpowiednie ustawienie wartości OPERA, OD1, OD2, ID
- pakowanie(pakiet, OPERA, OD1, OD2, ID);////pakujemy
- send(Connection, (char*)&L1, sizeof(L1), NULL); ////wysylamy strzal
- recv(Connection, (char*)&L3, sizeof(L3), NULL); ///odbieramy info o strzale
- odpakowanie(pakiet, OPERA, OD1, OD2, ID);///odpakowac
- //odpowiednie wykorzystanie wartości OPERA, OD1, OD2, ID
- ///wkladamy wypakowanego trafa do naszego trafa wiec moze zmienic na 1
- }
- std::cout << "Trafilismy!" << std::endl;
- shutdown(Connection, 2);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement