Borland C++ FAQ
Страница 10. Сети и Интернет


Сети и Интернет

  1. Как послать сообщение компьютеру в локальной сети

    // Для того чтобы послать сообщение компьютеру в локальной сети
    // напишите следующие функции:
    bool SendNetMessage(AnsiString Komp, AnsiString Mes)
    {
    AnsiString From;
    char CompName[10];
    DWORD size=10;
    //Откуда
    if(!GetComputerName(CompName,&size)) return false;
    From=CompName;
    if(Mes.Length()==0) return false;
    HANDLE hSlot = CreateFile(("\\\\"+Komp+"\\mailslot\\messngr").c_str(),
    GENERIC_WRITE, FILE_SHARE_READ, NULL,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hSlot == INVALID_HANDLE_VALUE) return false;
    DWORD cb=0;
    BOOL ret;
    char *buf=new char[From.Length()+1+Komp.Length()+1+Mes.Length()+1];
    //1. From
    memcpy(&buf[cb],From.c_str(),From.Length()+1);
    cb +=From.Length()+1; //+1 на конце должен быть 0
    //2. To
    memcpy(&buf[cb],Komp.c_str(),Komp.Length()+1);
    cb +=Komp.Length()+1;
    //3. Само сообщение
    memcpy(&buf[cb],Mes.c_str(),Mes.Length()+1);
    cb +=Mes.Length()+1;
    //ConvertToDos
    CharToOemBuff(buf,buf,cb);
    ret=WriteFile(hSlot, buf,cb, &cb, NULL);
    CloseHandle(hSlot);
    delete[] buf;
    if(!ret) return false;
    return true;
    }

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    AnsiString Komp,Mes;
    //Кому
    Komp=Edit1->Text; //Имя компьютера
    //Сообщение
    Mes=Edit2->Text; //Message
    bool ret;
    int Kol=UpDown1->Position;
    for(int i=1;i<=Kol;i++)
    {
    ret=SendNetMessage(Komp,Mes);
    }
    }

  2. Как скачать файл из Интернета с конкретного сайта

    // напишите следующуй код:
    NMHTTP1->InputFileMode=true;
    NMHTTP1->Get(" https://www.xxx.ru/pic.gif");
    NMHTTP1->Body="pic.gif"; //на винт скинуть

     

  3. Получение IP-адреса локальной машины

    // напишите следующуй код:
    #include <winsock.h>
    #include <stdio.h>

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    WORD wVersionRequested;
    WSADATA wsaData;
    wVersionRequested = MAKEWORD(1, 0);
    int err = WSAStartup(wVersionRequested, &wsaData);
    if(err == 0)
    {
    char hn[1024];
    struct hostent *adr;
    if(gethostname((char *)&hn, 1024))
    {
    int err = WSAGetLastError();
    Beep();
    };
    adr = gethostbyname(hn);
    if(adr)
    {
      char *LocalIp = new char[15];
      sprintf(LocalIp,"%d.%d.%d.%d",
      (unsigned char)adr->h_addr_list[0][0],
      (unsigned char)adr->h_addr_list[0][1],
      (unsigned char)adr->h_addr_list[0][2],
      (unsigned char)adr->h_addr_list[0][3]);
      Label1->Caption=LocalIp; //Выводим IP адрес
    }
    }
    }

     

  4. Получение имени локального компьютера

    // напишите следующуй код:
    #include <winsock.h>

    WORD wVersionRequested;
    WSADATA wsaData;
    wVersionRequested = MAKEWORD(1, 0);
    int err = WSAStartup(wVersionRequested, &wsaData);
    if(err == 0)
    {
    char name[1024];
    if(gethostname((char *)&name, 1024))
    {
    int err = WSAGetLastError();
    Beep();
    };
    Label1->Caption=name; //выводим имя
    }

 
« Предыдущая статья