Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 15.06.2015, 15:40   #1
Ашатан
 
Регистрация: 15.06.2015
Сообщений: 6
По умолчанию Помогите!!!!Не могу запустить приложение-клиент и приложение-сервер

Код:
void __fastcall TMainForm::ComboBox_ServerModeChange(TObject *Sender)
{
// Если On-Line, то:
if (ComboBox_ServerMode->ItemIndex == 0)
{
ServerSocket1->Active = True; // активируем ServerSocket1
ServerSocket2->Active = True; // активируем ServerSocket2
// В строке состояния (внизу программы) пишем "Работаем"
StatusBar1->Panels->Items[0]->Text = "Работаем";
}
// Если Off-Line, то деактивируем ServerSocket1 и ServerSocket2
if (ComboBox_ServerMode->ItemIndex == 1)
{
ServerSocket1->Active = False; // деактивируем ServerSocket1
ServerSocket2->Active = False; // деактивируем ServerSocket2
// В строке состояния (внизу программы) пишем "Не работаем"
StatusBar1->Panels->Items[0]->Text = "Не работаем";
ListBox_ClientList->Clear(); // Очищаем список клиентов
}
}
При подключении клиента он добавляется в список клиентов.
// Когда клиент подсоединился
void __fastcall TMainForm::ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
// Добавляем его в список клиентов
ListBox_ClientList->Items->Add("Клиент");
}
// Для отправки сообщения/файла клиенту щелкаем в списке клиентов
// строчку "Клиент"
void __fastcall TMainForm::ListBox_ClientListDblClick(TObject *Sender)
{
SendForm->ShowModal(); // Показываем форму для отправки сообщений
}


Текст набираем в поле ввода, после чего нажимаем на кнопку "Отправить текст". Обработчик события для этой кнопки следующий.
// При нажатии на кнопку "Отправить текст"
void __fastcall TSendForm::Button_SendTextClick(TObject *Sender)
{
// Добавляем отправляемый текст в окно 
Memo_Chat->Lines->Add("Сервер: "+Edit_SendText->Text);
// Отправляем текст клиенту
MainForm->ServerSocket1->Socket->Connections[0]->SendText("Сервер: " + Edit_SendText->Text);
// Очищаем поле ввода текста
Edit_SendText->Text = "";
}
Для отправки файла необходимо нажать на кнопку "Отправить файл". Обработчик события для этой кнопки следующий.
// Отправка файла клиенту при нажатии кнопки "Отправить файл"
void __fastcall TSendForm::Button_SendFileClick(TObject *Sender)
{
// Открываем диалоговое окно выбора файла
if (SendForm->OpenDialog1->Execute())
{
// Если файл выбран, то используем имя файла
if (SendForm->OpenDialog1->FileName != "")
{
//Открываем файл на чтение и передаем его клиенту
TFileStream* f1=new TFileStream(SendForm->OpenDialog1->FileName, fmOpenRead);
MainForm->ServerSocket2->Socket->Connections[0]->SendStream(f1);
//Добавляем в окно Чата сообщение, что такой-то файл отправлен
Memo_Chat->Lines->Add("Файл " + OpenDialog1->FileName + " отправлен");
}
}
}
При получении сообщения от клиента добавляем его в окно чата, расположенное на форме «Отправка-прием».
// В случае, если от клиента пришло текстовое сообщение
void __fastcall TMainForm::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
// Заносим его в окно чата
SendForm->Memo_Chat->Lines->Add(Socket->ReceiveText());
}
При отключении клиента от сервера очищаем список клиентов.
// Если клиент отсоединился
void __fastcall TMainForm::ServerSocket1ClientDisconnect(TObject *Sender, TCustomWinSocket *Socket)
{
ListBox_ClientList->Clear(); // Очищаем список клиентов
}
При завершении работы сервера, при закрытии программы, деактивируем сокеты 1 и 2.
// При завершении работы сервера (при закрытии программы)
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
ServerSocket1->Active = False; // деактивируем ServerSocket1
ServerSocket2->Active = False; // деактивируем ServerSocket2
}


ВЫВОДИТ ОШИБКИ ПРИ ЗАПУСКЕ
Цитата:
[C++ Error] Unit1.cpp(5): E2209 Unable to open include file 'TMainForm.h'
[C++ Error] Unit1.cpp(9): E2141 Declaration syntax error
[C++ Error] Unit1.cpp(11): E2090 Qualifier 'TMainForm' is not a class or namespace name
[C++ Error] Unit1.cpp(11): E2040 Declaration terminated incorrectly
ПОМОГИТЕ ПОЖАЛУЙСТА!!!!!!!!!

Последний раз редактировалось Stilet; 15.06.2015 в 16:27.
Ашатан вне форума Ответить с цитированием
Старый 15.06.2015, 16:27   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
'TMainForm.h
А есть вообще у тебя такой файл?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2015, 16:45   #3
Ашатан
 
Регистрация: 15.06.2015
Сообщений: 6
По умолчанию

Файл не могу переслать ....не получается
здесь вся программа.
ПОМОГИ,пожалуйста если можешь.

1.2 Разработка приложения-сервера обмена данными в компьютерной сети.
Создадим новый проект,
Табл. 1.2.1 Свойства формы и компонентов сервера
Свойство Значение
Окно формы TForm
Name MainForm
Caption сервер
Height 300
Width 210
TGroupBox
Name GroupBox_Options
Caption Настройки
TLabel
Name Label_IPadress
Caption IP-адрес сервера
TEdit
Name Edit_IPadress
Text 127.0.0.1
TGroupBox
Name GroupBox_ServerMode
Caption Режим работы
TCombobox
Name ComboBox_ServerMode
Items On-Line | Off-Line
ItemIndex 1
TGroupBox
Name GroupBox_ClientList
Caption Список клиентов
TListBox
Name ListBox_ClientList
TServerSocket
Name ServerSocket1
Active False
Port 2000
ServerType stNonBlocking
TServerSocket
Name ServerSocket2
Active False
Port 3000
ServerType stNonBlocking
TStatusBar
Name StatusBar1
Panels 0 - TStatusPanel
Табл. 1.2.2.Значения свойств формы и компонент сервера
Свойство Значение
Окно формы TForm
Name SendForm
Caption Отправка-прием
Height 210
Width 380
TMemo
Name Memo_Chat
Lines Пусто
ReadOnly True
TEdit
Name Edit_SendText
Text
TButton
Name Button_SendText
Caption Отправить текст
TBevel
Name Bevel1
Width 360
Height 3
TButton
Name Button_SendFile
Caption Отправить файл
TOpenDialog
Name OpenDialog1
При запуске серверной части программы необходимо указать IP-адрес сервера и выбрать режим работы «On-Line». На приложении-сервер будем использовать два компонента TServerSocket – одну для обмена сообщениями, другую для обмена файлами.
Ашатан вне форума Ответить с цитированием
Старый 16.06.2015, 16:46   #4
Ашатан
 
Регистрация: 15.06.2015
Сообщений: 6
По умолчанию

ПРОДОЛЖЕНИЕ

// Выбор режима работы
void __fastcall TMainForm::ComboBox_ServerModeChang e(TObject *Sender)
{
// Если On-Line, то:
if (ComboBox_ServerMode->ItemIndex == 0)
{
ServerSocket1->Active = True; // активируем ServerSocket1
ServerSocket2->Active = True; // активируем ServerSocket2
// В строке состояния (внизу программы) пишем "Работаем"
StatusBar1->Panels->Items[0]->Text = "Работаем";
}
// Если Off-Line, то деактивируем ServerSocket1 и ServerSocket2
if (ComboBox_ServerMode->ItemIndex == 1)
{
ServerSocket1->Active = False; // деактивируем ServerSocket1
ServerSocket2->Active = False; // деактивируем ServerSocket2
// В строке состояния (внизу программы) пишем "Не работаем"
StatusBar1->Panels->Items[0]->Text = "Не работаем";
ListBox_ClientList->Clear(); // Очищаем список клиентов
}
}
При подключении клиента он добавляется в список клиентов.
// Когда клиент подсоединился
void __fastcall TMainForm::ServerSocket1ClientConne ct(TObject *Sender,
TCustomWinSocket *Socket)
{
// Добавляем его в список клиентов
ListBox_ClientList->Items->Add("Клиент");
}
После этого можно начинать отправку клиенту сообщений или файлов. Для этого нужно сделать двойной щелчок мышью на имени клиента в списке.
// Для отправки сообщения/файла клиенту щелкаем в списке клиентов
// строчку "Клиент"
void __fastcall TMainForm::ListBox_ClientListDblCli ck(TObject *Sender)
{
SendForm->ShowModal(); // Показываем форму для отправки сообщений
}
При нажатии на кнопку "Отправить текст"
void __fastcall TSendForm::Button_SendTextClick(TOb ject *Sender)
{
// Добавляем отправляемый текст в окно
Memo_Chat->Lines->Add("Сервер: "+Edit_SendText->Text);
// Отправляем текст клиенту
MainForm->ServerSocket1->Socket->Connections[0]->SendText("Сервер: " + Edit_SendText->Text);
// Очищаем поле ввода текста
Edit_SendText->Text = "";
}
Для отправки файла необходимо нажать на кнопку "Отправить файл". Обработчик события для этой кнопки следующий.
// Отправка файла клиенту при нажатии кнопки "Отправить файл"
void __fastcall TSendForm::Button_SendFileClick(TOb ject *Sender)
{
// Открываем диалоговое окно выбора файла
if (SendForm->OpenDialog1->Execute())
{
// Если файл выбран, то используем имя файла
if (SendForm->OpenDialog1->FileName != "")
{
//Открываем файл на чтение и передаем его клиенту
TFileStream* f1=new TFileStream(SendForm->OpenDialog1->FileName, fmOpenRead);
MainForm->ServerSocket2->Socket->Connections[0]->SendStream(f1);
//Добавляем в окно Чата сообщение, что такой-то файл отправлен
Memo_Chat->Lines->Add("Файл " + OpenDialog1->FileName + " отправлен");
}
}
}
При получении сообщения от клиента добавляем его в окно чата, расположенное на форме «Отправка-прием».
// В случае, если от клиента пришло текстовое сообщение
void __fastcall TMainForm::ServerSocket1ClientRead( TObject *Sender,
TCustomWinSocket *Socket)
{
// Заносим его в окно чата
SendForm->Memo_Chat->Lines->Add(Socket->ReceiveText());
}
При отключении клиента от сервера очищаем список клиентов.
// Если клиент отсоединился
void __fastcall TMainForm::ServerSocket1ClientDisco nnect(TObject *Sender, TCustomWinSocket *Socket)
{
ListBox_ClientList->Clear(); // Очищаем список клиентов
}
При завершении работы сервера, при закрытии программы, деактивируем сокеты 1 и 2.
// При завершении работы сервера (при закрытии программы)
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
ServerSocket1->Active = False; // деактивируем ServerSocket1
ServerSocket2->Active = False; // деактивируем ServerSocket2
}
Ашатан вне форума Ответить с цитированием
Старый 16.06.2015, 16:48   #5
Ашатан
 
Регистрация: 15.06.2015
Сообщений: 6
По умолчанию

ПРОДОЛЖЕНИ
1.3 Разработка приложения-клиента обмена данными в компьютерной сети.

Таблица 1.3.1. Значения свойств формы и компонент
Свойство Значение
Окно формы TForm
Name MainForm
Caption Чат: клиент
Height 300
Width 210
TGroupBox
Name GroupBox_Options
Caption Найстройки
TLabel
Name Label_IPadress
Caption IP-адрес сервера
TEdit
Name Edit_IPadress
Text 127.0.0.1
TGroupBox
Name GroupBox_ClientMode
Caption Режим работы
TCombobox
Name ComboBox_ClientMode
Items On-Line Off-Line
ItemIndex 1
TGroupBox
Name GroupBox_ClientList
Caption Список клиентов
TListBox
Name ListBox_ClientList
TClientSocket
Name ClientSocket1
Active False
Address 127.0.0.1
Port 2000
ServerType stNonBlocking
TClientSocket
Name ClientSocket2
Active False
Address 127.0.0.1
Port 3000
ServerType stNonBlocking
TStatusBar
Name StatusBar1
Panels 0 - TStatusPanel


Табл. 1.3.2. Значения свойств формы и компонент сервера
Свойство Значение
Окно формы TForm
Name SendForm
Caption Отправка-прием
Height 160
Width 380
TMemo
Name Memo_Chat
Lines Пусто
ReadOnly True
TEdit
Name Edit_SendText
Text Пусто
TButton
Name Button_SendText
Caption Отправить текст
TSaveDialog
Name SaveDialog1

После ввода параметров соединения и выбора режима работы «On-Line» обе компоненты TClientSocket активируются и пытаются подключиться к серверу. В случае удачного подключения к серверу, сервер добавляется в список клиентов. В режиме «Off-Line» обе компоненты TClientSocket деактивируются, и разрывают соединение с сервером.
// Выбор режима работы
void __fastcall TMainForm::ComboBox_ClientModeChang e(TObject *Sender)
{
// Если On-Line
if (ComboBox_ClientMode->ItemIndex == 0)
{
// Присваиваем IP-адрес сервера свойству Address сокета 1
ClientSocket1->Address = Edit_IPadress->Text;
ClientSocket1->Active = True; // соединяемся с сервером
// Присваиваем IP-адрес сервера свойству Address сокета 2
ClientSocket2->Address = Edit_IPadress->Text;
ClientSocket2->Active = True; // соединяемся с сервером
// В строке состояния (внизу) программы пишем «Работаем»
StatusBar1->Panels->Items[0]->Text = «Работаем»;
// В список клиентов добавляем «Сервер»
ListBox_ClientList->Items->Add(«Сервер»);
}
// Если Off-Line
if (ComboBox_ClientMode->ItemIndex == 1)
{
ClientSocket1->Active = False;//Деактивируем соединение сокета 1
ClientSocket2->Active = False;//Деактивируем соединение сокета 2
// В строке состояния программы пишем «Не работаем»
StatusBar1->Panels->Items[0]->Text = «Не работаем»;
// Очищаем список клиентов
ListBox_ClientList->Clear();
Ашатан вне форума Ответить с цитированием
Старый 16.06.2015, 16:48   #6
Ашатан
 
Регистрация: 15.06.2015
Сообщений: 6
По умолчанию

ПОСЛЕДНЕЕ
Также переводим клиента в режим «Off-line» и очищаем список клиентов.
// Если произошла ошибка соединения с сервером
void __fastcall TMainForm::ClientSocket1Error(TObje ct *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ErrorCode = 0;
// В строке состояния пишем «Ошибка соединения»
StatusBar1->Panels->Items[0]->Text = «Ошибка соединения»;
// В списке режимов работы выбираем «Off-Line»
ComboBox_ClientMode->ItemIndex = 1;
ListBox_ClientList->Clear(); // Очищаем список клиентов
}
// Для отправки сообщения серверу щелкаем в списке клиентов
// строчку «Сервер»
void __fastcall TMainForm::ListBox_ClientListDblCli ck(TObject *Sender)
{
SendForm->ShowModal(); // Показываем форму для отправки сообщений
}
Текст набираем в поле ввода, после чего нажимаем на кнопку «Отправить текст». Обработчик события для этой кнопки следующий.
// При нажатии на кнопку «Отправить текст»
void __fastcall TSendForm::Button_SendTextClick(TOb ject *Sender)
{
// Добавляем отправляемый текст в окно чата
Memo_Chat->Lines->Add(«Клиент: »+Edit_SendText->Text);
// Отправляем текст серверу
MainForm->ClientSocket1->Socket->SendText(«Клиент: » +
Edit_SendText->Text);
// Очищаем поле ввода текста
Edit_SendText->Text = «»;
}
Для приема файла служит компонента ClientSocket2. При получении файла от сервера выполняется следующий обработчик события.
// Прием файла
void __fastcall TMainForm::ClientSocket2Read(TObjec t *Sender,
TCustomWinSocket *Socket)
{
ShowMessage(«Принимается файл...»);
//Открывается диалог сохранения файла
if (SendForm->SaveDialog1->Execute())
{
//Если указали имя файла при сохранении файла
if (SendForm->SaveDialog1->FileName != «»)
{
Pointer buff; // объявляем буфер
int iLen; // указываем длину буфера
// Создаем файл
TFileStream* f2=new TFileStream(SendForm->SaveDialog1->FileName, fmCreate);
// уточняем размер данных, полученных от сервера
iLen = ClientSocket2->Socket->ReceiveLength();
// выделяем память для буфера
buff = GetMemory(iLen);
//копируем буфер сокета в буфер buff
ClientSocket2->Socket->ReceiveBuf(buff,iLen);
//передаем данные из буфера buff в файл
f2->Write(buff,iLen);
f2->Free();
// добавляем в окно чата сообщение, что файл полуен
SendForm->Memo_Chat->Lines->Add(«Файл» + SendForm->SaveDialog1->FileName + « получен»);
}}}
При получении сообщения от сервера добавляем его в окно, расположенное на форме «Отправка-прием».
// При получении сообщения от сервера добавляем его в окно
void __fastcall TMainForm::ClientSocket1Read(TObjec t *Sender,
TCustomWinSocket *Socket)
{
SendForm->Memo_Chat->Lines->Add(ClientSocket1->Socket->ReceiveText());
}

// При отсоединении от сервера
void __fastcall TMainForm::ClientSocket1Disconnect( TObject *Sender,
TCustomWinSocket *Socket)
{
// В списке режимов работы указываем «Off-Line»
ComboBox_ClientMode->ItemIndex = 1;
// В строке состояния программы пишем «Не работаем»
StatusBar1->Panels->Items[0]->Text = «Не работаем»;
// Очищаем список клиентов
ListBox_ClientList->Clear();
}
При завершении работы клиента, при закрытии программы, деактивируем сокеты 1 и 2.
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
ClientSocket1->Active = False; // Деактивируем соединение сокета 1
ClientSocket2->Active = False; // Деактивируем соединение сокета 2
}
Ашатан вне форума Ответить с цитированием
Старый 16.06.2015, 17:08   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Не видя проекта... Ну не, извиняй.
Так просто от текста кода толку мало, если непонятно как он между собой связан.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.06.2015, 17:16   #8
Ашатан
 
Регистрация: 15.06.2015
Сообщений: 6
По умолчанию

жалко,просто не знаю что делать,проект нужно уже показывать....
Ашатан вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сервер-клиент приложение Яшар Общие вопросы Delphi 8 30.05.2011 21:27
Клиент/сервер приложение HarmonicMan Работа с сетью в Delphi 0 27.04.2010 20:51
Приложение клиент\сервер с БД Vol666 БД в Delphi 1 08.10.2009 11:28
Приложение клиент\сервер Vol666 Работа с сетью в Delphi 5 08.10.2009 08:06
Возможно-ли Клиент-серверное приложение типа Клиент(Pascal) а сервер(CGI)? Demol Работа с сетью в Delphi 1 21.04.2009 15:18


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840