Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
92.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
100.76 Кб
Скачать

Описание программы

Для написания программы был выбран язык СИ и среда разработки Microsoft Visual Studio 2008.

Для удобного интерфейса пользователя создавался проект Windws Forms.

При помощи редактора форм были созданы все необходимые элементы.

Инициализация

Инициализацию можно разбить на 2 пункта – это инициализация звука и сокетов.

За инициализацию звука отвечают строки:

CurrentFormatFile.wFormatTag=WAVE_FORMAT_PCM;

CurrentFormatFile.nChannels=1;

CurrentFormatFile.nSamplesPerSec=8000;

CurrentFormatFile.nAvgBytesPerSec=8000;

CurrentFormatFile.nBlockAlign=1;

CurrentFormatFile.wBitsPerSample=8;

Эти строки выполняют установку формата звука.

UINT uDeviceID=WAVE_MAPPER;

mres=waveOutOpen(&hwo,uDeviceID,&CurrentFormatFile,0,0,0);

if (mres!=0) textBox_error->Text=L"Error: WaveOutOpen";

Данные строки выполняют поиск и открытие устройства для вывода звука.

За инициализацию сокетов отвечают следующие строки:

WSADATA wsadata;

WORD wVersionRequested;

wVersionRequested = MAKEWORD(2,0);

if (WSAStartup(wVersionRequested,&wsadata)==SOCKET_ERROR)

{

textBox_error->Text=L"Error: WSAStartup";

return false;

};

s=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);

if(s==INVALID_SOCKET)

{

textBox_error->Text=L"Error: Create socket";

return false;

};

//создание структуры адреса отправителя

from.sin_addr.S_un.S_addr=ADDR_ANY;

from.sin_family=PF_INET;

from.sin_port=5000;

//подключение сокета к коммуникационной среде

int errSer=bind(s,(LPSOCKADDR)&from,sizeof(from));

if(errSer!=0)

{

//MessageBox(0,"Error: Bind", 0, MB_OK);

textBox_error->Text=L"Error: Bind";

closesocket(s); //закрытие сокета

return false;

};

return true;

Сначала происходит установка версии сокета, далее его создание, заполнение адреса отправителя и подключение сокета. При неудаче в любом действии выводится соответствующее сообщения.

Посылка одного блока данных

В данной функции происходит сначала чтение блока из файла.

mmioRead(hmmio,WaveBuf,SIZE_OF_SOUND);

Далее происхоит заполнение полей и отправка структуры.

//заполнение заголовка пакета

//имя отправителя берётся из поля "От кого"

memcpy(sSound.Name,"telefon",10);

//номер пакета

sSound.Number=num++;

//заполнение поля данных

memcpy(sSound.SoundData,SendVoiceBuf,SIZE_OF_SOUND);

//формирование структуры с IP-адресом получателя

::to.sin_family=PF_INET;

//::to.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

String^ strinput2=textBox_IP->Text;

char c[20];

for(int j=0;j<strinput2->Length;j++)

c[j]=strinput2[j];

c[strinput2->Length]='\0';

to.sin_addr.S_un.S_addr=inet_addr(c);

::to.sin_port=5000;

//отправка пакета

int err=sendto(s,(char*)(&sSound),sizeof(Sound),0,(struct sockaddr*)&to,sizeof(to));

if (err==SOCKET_ERROR)

//MessageBox(0,"Error: Send sound",0,MB_OK);

textBox_error->Text=L"Error: Send sound";

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]