dll + winsock + c++

0

Witam! Mam do Was wielką prosbe o pomoc. Potrzebuje za pomocą biblioteki .dll, którą mam dołączoną do programu wysłać pewien pakiet o np. takiej zawartosci > 0R 03 01 S0 8Y T1 I3 ( przyklad ). Probowalem znaleźć odpowiedz w dokumentacji winsock, ale to co udało mi się znaleźć w języku polskim było z wykorzystniem kontrolek w c++ builder etc.. ja korzystam z czystego c++ ew. z dodatkami winapi.

A wiec za pomocą czego można zdefiniować taką funkcje, która wyśle mi ten pakiet ?
( ze tak to nazwe "cel" jest juz wczesniej okreslony, wiec chodzi tylko o zwykłe wysłanie pakietu )
funkcja wysylajaca pakiet musi byc w .dll badz odwolywac sie do niego w jakis sposob

Pozdrawiam, Kazimierz R.

0

Dolanczas biblioteke winsock2.h oraz w opcjach kompilatora dolinkowujesz wsock32 jezeli dobrze pamietam. Pozniej piszesz tak:


struct sockaddr_in InS;
struct hostent *Host;

WSADATA wsa;
SOCKET Sock1;

char IP[] = {"127.0.0.1"};   //ip serwera z ktorym sie laczymy
int PORT = 443;               //port na ktory sie laczymy

       if(WSAStartup(MAKEWORD(2,2), &wsa) != 0)
	return 1;

	Sock1 = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
	if(Sock1 == INVALID_SOCKET)
	return 1;

	
	InS.sin_addr.s_addr = inet_addr(IP);
	InS.sin_family = AF_INET;
	InS.sin_port = htons(PORT);

         if(InS.sin_addr.s_addr == INADDR_NONE)
	     {
	     Host = gethostbyname(IP);

		 if(Host == NULL)
		 return 1;

	     CopyMemory(&InS.sin_addr, (*Host).h_addr_list[0], (*Host).h_length);
         }

	
	if(connect(Sock1, (struct sockaddr *)&InS, sizeof(InS)) == SOCKET_ERROR)
	{
		//jezeli sie nie powiodlo polaczenie to
        return 1;
	}

        //tak wysylamy
       char pakiet[] = {"0R 03 01 S0 8Y T1 I3"}; 
       send(Sock1, pakiet, sizeof(pakiet), 0);
        
        //tak odbieramy
       char buf[50];
       recv(Sock1, buf, sizeof(buf), 0);

       //aby sie rozlaczyc piszemy pod koniec tak:
      closesocket(Sock1);
      WSACleanup();

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