Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <WinSock2.h>
- #include <conio.h>
- #define END WSACleanup(); getch(); return 0;
- #define END2 shutdown(gniazdo,2); closesocket(gniazdo); WSACleanup(); getch(); return 0;
- #define ESC 27
- #define SPACE 32
- #define ENTER 13
- #define S 0
- #pragma comment(lib,"ws2_32.lib")
- using namespace std;
- struct datagram
- {
- char A;
- char imie[7];
- char Z;
- char nazwisko[9];
- };
- struct potwierdzenie
- {
- char A;
- char Z;
- };
- int _tmain(int argc, _TCHAR* argv[])
- {
- WSAData wsaData;
- datagram *W = new datagram();
- W->A = 0x32;
- W->Z = 0x0A;
- strcpy(W->imie, "Daniel");
- strcpy(W->nazwisko, "Splawski");
- if((WSAStartup(MAKEWORD(2,2),&wsaData))!=0)
- {
- printf("Blad ladowania biblioteki : %d",WSAGetLastError());
- END
- }
- SOCKET gniazdo;
- if((gniazdo=socket(AF_INET,SOCK_DGRAM,0))==INVALID_SOCKET)
- {
- printf("Blad ladowania gniazda : %d",WSAGetLastError());
- END2
- }
- SOCKADDR_IN client;
- client.sin_family = AF_INET;
- client.sin_addr.s_addr = INADDR_ANY;
- client.sin_port=htons(0);
- if((bind(gniazdo,(SOCKADDR*)&client,sizeof(client)))==SOCKET_ERROR)
- {
- printf("Blad bindowania gniazda : %d",WSAGetLastError());
- END2
- }
- SOCKADDR_IN serwer;
- serwer.sin_family=AF_INET;
- serwer.sin_addr.s_addr=inet_addr("192.168.0.104");
- serwer.sin_port=htons(7404);
- int sAddrSize = sizeof(serwer);
- ////////////////////////////////////////////////////////////////////////
- timeval time = { 0, 100000 };
- fd_set set;
- int one = 1;
- int przycisk;
- printf("dowolny przycisk aby wyslac dane || aby zakonczyc nacisnij esc\n");
- while(true)
- {
- FD_ZERO(&set);
- FD_SET(S, &set);
- if (select(0, &set, 0, 0, &time) > 0)
- {
- if (FD_ISSET(S, &set) )
- {
- }
- }
- if (_kbhit() )
- {
- przycisk = _getch();
- if(przycisk == ESC)
- return 0;
- else if(przycisk == SPACE)
- {
- setsockopt(gniazdo, SOL_SOCKET, SO_BROADCAST, (char*)&one, sizeof(one));
- serwer.sin_addr.s_addr = INADDR_BROADCAST;
- if(SOCKET_ERROR == sendto(gniazdo,(char*)&W,sizeof(*W),0,(SOCKADDR*)&serwer,sizeof(serwer)))
- {
- printf("blad wysylanych danych %d\n",WSAGetLastError());
- getch();
- }
- }
- else if(przycisk == ENTER)
- {
- setsockopt(gniazdo, SOL_SOCKET, SO_REUSEADDR, (char*) &one, sizeof(one));
- serwer.sin_addr.s_addr = inet_addr("192.168.0.104");
- if (SOCKET_ERROR == recvfrom(gniazdo, (char*) &W, sizeof(*W), 0, (SOCKADDR*)&serwer, &sAddrSize))
- {
- printf("blad wysylanych danych %d\n", WSAGetLastError());
- getch();
- }
- cout << W->A << W->imie << W->Z << W->nazwisko;
- potwierdzenie *P = new potwierdzenie();
- P->A = 0x32;
- P->Z = 0x01;
- if (SOCKET_ERROR == sendto(gniazdo, (char*)&P, sizeof(*P), 0, (SOCKADDR*)&serwer, sizeof(serwer)))
- {
- printf("blad wysylanych danych %d\n", WSAGetLastError());
- getch();
- }
- }
- }
- }
- //wysłanie do serwera danych
- //if(SOCKET_ERROR == sendto(gniazdo,qwe,sizeof(qwe),0,(SOCKADDR*)&serwer,sizeof(serwer)))
- //{
- // printf("blad wysylania : %d\n",WSAGetLastError());
- // getch();
- //}
- double tab[50];
- int rozmiar = sizeof(serwer);
- int err;
- //odebranie wartości od serwera
- err=(int)recvfrom(gniazdo,(char*)&tab,sizeof(double)*50,0,(SOCKADDR*)&serwer,&rozmiar);
- if(err<0)
- {
- printf("blad wysylania : %d\n",WSAGetLastError());
- getch();
- //continue;
- }
- double suma=0;
- err= err/sizeof(double);
- // jak bys chcial sprawdzic ze bledy czasem sypia wystarczy zmienic err na wielkosc tablicy czyli 50 i odkomentowac if :P
- for(int i=0;i<err;i++)
- {
- //if(tab[i]>=0)
- suma+=tab[i];
- }
- printf("\nSuma : %f\n",suma);
- // zwrócenie otrzymanej sumy z serwera z powrotem do niego w celu weryfikacji poprawności otrzymanych danych
- //int one = 1;
- setsockopt( gniazdo, SOL_SOCKET, SO_BROADCAST, (char*) &one, sizeof(one));
- if(SOCKET_ERROR==sendto(gniazdo,(char*)&W,sizeof(double),0,(SOCKADDR*)&serwer,sizeof(serwer)))
- {
- printf("blad wysylanych danych %d\n",WSAGetLastError());
- getch();
- }
- END2
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement