dll + winsock + c++

Odpowiedz Nowy wątek
2006-08-23 15:44
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.

Pozostało 580 znaków

2006-08-23 16:37
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();
 

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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