|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Тексти програм. #include "Unit1.h"Програма клієнт: //---------------------------------------------------------------------------
#include <vcl.h> #pragma hdrstop
#include "Unit1.h" #include <winsock2.h> // Wincosk2.h має бути // підключений раніше windows.h! #include <windows.h> #define SERVER_PORT 69
//--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; SOCKET Sock; sockaddr_in local_addr;
//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender) { char buff[1024]; // Буфер для різних потреб String s; // Крок 1 - Ініціалізація Бібліотеки Сокетів if (WSAStartup(0x0202,(WSADATA *) &buff[0])) { // Помилка! s="Error WSAStartup "+ IntToStr(WSAGetLastError()); Memo1->Lines->Add(s); return; } // Крок 2 - створення сокета
Sock = socket(AF_INET, SOCK_DGRAM, 0);// створення сокета //AF_INET тип адреси, прийнятої в InterNet //SOCK_DGRAM передача даних без створення каналів зв'язку через датаграмний протогол UDP // Крок 3 пов'язання сокета з локальною адресою
local_addr.sin_family=AF_INET; local_addr.sin_port=htons(SERVER_PORT); // не забуваємо про мережевий порядок!!! local_addr.sin_addr.s_addr=inet_addr("127.0.0.1");; // клієнт підключається на '127.0.0.1'
} //---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { shutdown(Sock, SD_BOTH); closesocket(Sock);// закриття сокета WSACleanup; // звільнення ресурсів
} //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { String s,s1; int lenAddr; char *Buff; //Buff = new char[256]; lenAddr= sizeof(local_addr); s=Edit1->Text; Buff = new char[s.Length()]; lstrcpy(Buff, s.c_str()); s1=s;
LARGE_INTEGER freq,time1,time2;double span;char buf[20]; QueryPerformanceFrequency(&freq); QueryPerformanceCounter(&time1);
sendto(Sock, Buff, lstrlen(Buff), 0,(PSOCKADDR)&local_addr, lenAddr);
QueryPerformanceCounter(&time2); time2.QuadPart -= time1.QuadPart; span = (double) time2.QuadPart / freq.QuadPart; s1+=" "+FloatToStrF(span,ffFixed,32,7)+" c"; Memo1->Lines->Add(s1);
} //--------------------------------------------------------------------------- Програма сервер: //---------------------------------------------------------------------------
#include <vcl.h> #pragma hdrstop
#include "Unit1.h" #include <winsock2.h> // Wincosk2.h має бути // підключений раніше windows.h! #include <windows.h> #define SERVER_PORT 69
//--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1;
SOCKET Sock;
//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) { char buff[1024]; // Буфер для різних потреб String s; // Крок 1 - Ініціалізація Бібліотеки Сокетів if (WSAStartup(0x0202,(WSADATA *) &buff[0])) { // Помилка! s="Error WSAStartup "+ IntToStr(WSAGetLastError()); Memo1->Lines->Add(s); return; } // Крок 2 - створення сокета
Sock = socket(AF_INET, SOCK_DGRAM, 0);// створення сокета //AF_INET тип адреси, прийнятої в InterNet //SOCK_DGRAM передача даних без створення каналів зв'язку через датаграмний протогол UDP // Крок 3 пов'язання сокета з локальною адресою sockaddr_in local_addr; local_addr.sin_family=AF_INET; local_addr.sin_port=htons(SERVER_PORT); // не забуваємо про мережевий порядок!!! local_addr.sin_addr.s_addr=0; // сервер приймає підключення // на всі IP-адреса
// викликаємо bind для скріплення if (bind(Sock,(sockaddr *) &local_addr, sizeof(local_addr))) { // Помилка s="Error bind "+ IntToStr(WSAGetLastError()); Memo1->Lines->Add(s); closesocket(Sock); // закриваємо сокет! WSACleanup(); return; } WSAAsyncSelect (Sock, Form1->Handle, WM_USER, FD_READ | FD_CLOSE | FD_WRITE); }
//--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { shutdown(Sock, SD_BOTH); closesocket(Sock);// зачинення сокета WSACleanup; // звільнення ресурсів
} //---------------------------------------------------------------------------
void __fastcall TForm1::OnWSANetEvent1(TMessage& Msg) { char *Buff; // буфер для зберігання інформації int lenAddr; sockaddr_in local_addr; local_addr.sin_family=AF_INET; local_addr.sin_port=htons(SERVER_PORT); // не забуваємо про мережевий порядок!!! local_addr.sin_addr.s_addr=0; // сервер приймає підключення // на всі IP-адреса lenAddr= sizeof(local_addr);
// обробка повідомлення про прийом інформації if (WSAGETSELECTEVENT(Msg.LParam) == FD_READ) { Buff = new char[256]; // читання информаци з каналу recvfrom(Sock, Buff, 256, 0, (PSOCKADDR)&local_addr,&lenAddr); Memo1->Lines->Add(Buff); // recv ((SOCKET)Msg.WParam,Buff,256,0); } // обробка повідомлення про розрив з'єднання if (WSAGETSELECTEVENT(Msg.LParam) == FD_CLOSE) { // закриття сокета closesocket(Sock); Sock = INVALID_SOCKET; } Msg.Result = 0; } Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.016 сек.) |