Hyluss icon

pwss

Hyluss | PRO | 03/21/17 10:14:04 PM UTC | 0 ⭐ | 491 👁️ | Never ⏰ | []
text |

5.58 KB

|

None

|

0 👍

/

0 👎

// UDP komunikacja prsota.cpp : Defines the entry point for the console application.
//
 #include "stdafx.h"
#include <conio.h>
#include <cstdio>
#include <WinSock2.h>
#include <iostream>
#include <cstdlib>
#include <vector>
 using namespace std;
  class wyjatek
{
	DWORD dwError;
public:
	wyjatek(int iResult)
	{
		printf ("Winsock - Blad nr %d",iResult);		
	}
 	wyjatek (hostent *rH)
	{
			dwError = WSAGetLastError();
			if (dwError == WSAHOST_NOT_FOUND)
			{
				printf ("host not found");
			}
			else if (dwError = WSANO_DATA)
			{
				printf ("no data record");
			}
			else
			{
				printf ("failed %d",dwError);
			}
	}
};
 class TInicjalizacja
{
	int iResult;
	WSAData wsaData;
	int dwError;
public:
	TInicjalizacja()
	{
		iResult = WSAStartup (MAKEWORD (2,2), &wsaData);
		if (iResult != 0)
		{
 			throw wyjatek(iResult);
		}
		else
		{
		//	printf ("Winosck jest oki\n");
		}
	}
	~TInicjalizacja()
	{
		WSACleanup();
	}
 };
 class THost
{
	int iResult;
	DWORD dwError;
	hostent *rH;
	char hostname[100];
	sockaddr_in serwer;
	sockaddr_in klient;
public:
	THost (const char *nazwa)
	{
		strcpy (hostname,nazwa);
		rH = gethostbyname(hostname);
		if (rH == NULL) throw wyjatek (rH);		
		else
		{
			serwer.sin_family = AF_INET;
			serwer.sin_port = htons (5000);
			serwer.sin_addr.s_addr = (INADDR_BROADCAST);
 			//
			klient.sin_family = AF_INET;
			klient.sin_port = htons (5000);//( (rand()%65535) );
			klient.sin_addr.s_addr =  htonl (INADDR_ANY);// inet_addr (hostname);//(INADDR_ANY);// inet_addr (hostname);
	//		klient.sin_addr.s_addr = inet_addr ("255.255.255.255");
		}
	}
 	hostent ZwrocHostent()
	{
		return *rH;
	}
 	sockaddr_in Zwrocserwer()
	{
		return serwer;
	}
 	sockaddr_in Zwrocklient()
	{
		return klient;
	}
 };
 struct TAdresyIP
{
	int suma;
	char* IP;
};
  int _tmain(int argc, _TCHAR* argv[])
{
 	TInicjalizacja TW;
  /////////////////////////////////////////////////////////////
	SOCKET Client;
	Client = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if (Client == INVALID_SOCKET)
	{
		cout << "Nie mozna stworzyc socket" << endl;
		getch();
		return 1;
	}
/*	const char on = 1;
	if (setsockopt (Client, SOL_SOCKET, SO_BROADCAST,&on,sizeof (on) ) < 0)
	{
		cout << "blad" << endl;
		getch();
		closesocket(Client);
		return 1;
	}
	*/
//////////////////////////////////////////////////////////////////
	char host[128] = "127.0.0.1";
	THost Th (host);
//////////////////////////////////////////////////////////////////////////////////////
	char ciag [1024];
   	char buff2[1024];
    int buffLen = 1024;
  	int AddrSize; //= sizeof (Addr);
 	int wynik;
	bool koncz = false;
 	int Random = 0;
	char wyslanymsg[1024];
	bool sprawdzAdres = false;
 	vector <TAdresyIP> adresyIP;
	TAdresyIP tempadr;
	tempadr.suma = 0;
  sockaddr_in Addr = Th.Zwrocklient();
 	Addr.sin_family = AF_INET;
	Addr.sin_port = htons (5000);
	Addr.sin_addr.s_addr = htonl (INADDR_ANY);
 //		wynik = bind( Client,( SOCKADDR * )&Addr , sizeof( Addr ) );
		wynik = bind( Client,( SOCKADDR * )&Th.Zwrocklient() , sizeof (Th.Zwrocklient()));
 		if( wynik == SOCKET_ERROR )
		{
			printf( "bind() failed.\n" );
			closesocket( Client );
			return 1;
		}
  	while (true)
	{
		Random = 1+ (rand()%20);
 	//	if (getch() == VK_ESCAPE) break;
 		int X = _kbhit();
		if (X!=0)
		{
			X=1;
		}
 		itoa (Random,wyslanymsg,10);
		char* wyslanymsg = "AB";
/*		int wynik = sendto (Client,wyslanymsg,strlen(wyslanymsg),0,(SOCKADDR*)&Th.Zwrocserwer(), sizeof(Th.Zwrocserwer() ) );
		if (wynik == INVALID_SOCKET)
		{
			cout <<"Blad wysylania nr:" << WSAGetLastError();
			shutdown (Client,2);
			closesocket (Client);
			getch();
			return 1;
		}
*/
	//	AddrSize = sizeof (Th.Zwrocklient());
    		/*
		if( bind( Client,( SOCKADDR * ) &Th.Zwrocserwer(), sizeof( &Th.Zwrocserwer() ) ) == SOCKET_ERROR )
		{
			printf( "bind() failed.\n" );
			closesocket( Client );
			return 1;
		}
		*/
 //sockaddr_in 
	Addr = Th.Zwrocklient();
 	Addr.sin_family = AF_INET;
	Addr.sin_port = htons (5000);
	Addr.sin_addr.s_addr = htonl (INADDR_ANY);
//sockaddr_in Addr = Th.Zwrocserwer();
int AddrSize = sizeof(Th.Zwrocklient());
 		wynik = recvfrom (Client,buff2,buffLen,0,(SOCKADDR*)&Th.Zwrocklient(), &AddrSize ); 	
//		wynik = recvfrom (Client,buff2,buffLen,0,(SOCKADDR*)&Addr,&AddrSize); 		
	  if (wynik>0)
	  {
		  Addr = Th.Zwrocklient();
	//	  Addr = Th.rH->h_addr_list[0];
	//	  Addr = Th.rH->h_addr_list[0];
  		  wynik=1;
	  }
		/*
		buff2[wynik] = 0;
 		if (wynik == INVALID_SOCKET)
		{
			cout <<"Blad odbeirania nr" << WSAGetLastError();
			shutdown (Client,2);
			closesocket(Client);
			getch();
			return 0;
		}
		*/
 	/*	
		for (int i=0; i< adresyIP.size(); i++)
		{
			if (adresyIP[i].IP == Th.ZwrocHostent().h_name) sprawdzAdres = true;
		}
 		if (!sprawdzAdres)
		{
			tempadr.IP = Th.ZwrocHostent().h_name;
			tempadr.suma = atoi (buff2);
			adresyIP.push_back(tempadr);
		}
		else
		{
			for (int i = 0; i < adresyIP.size(); i++)
                {
                    if (adresyIP[i].IP == Th.ZwrocHostent().h_name)
                    {
                        adresyIP[i].suma += atoi(buff2);
                    }
                }
         }
         for (int i = 0; i < adresyIP.size(); i++)
            {
                cout << adresyIP[i].IP << ":        " << adresyIP[i].suma << endl;
			}
			*/
	}
 	shutdown (Client,2);
	closesocket (Client);
	cout << "Koniec programu" << endl;
	getch();
	return 0;
 }

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎