|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.06.2015, 15:40 | #1 | |
Регистрация: 15.06.2015
Сообщений: 6
|
Помогите!!!!Не могу запустить приложение-клиент и приложение-сервер
Код:
ВЫВОДИТ ОШИБКИ ПРИ ЗАПУСКЕ Цитата:
Последний раз редактировалось Stilet; 15.06.2015 в 16:27. |
|
15.06.2015, 16:27 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
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 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Не видя проекта... Ну не, извиняй.
Так просто от текста кода толку мало, если непонятно как он между собой связан.
I'm learning to live...
|
16.06.2015, 17:16 | #8 |
Регистрация: 15.06.2015
Сообщений: 6
|
жалко,просто не знаю что делать,проект нужно уже показывать....
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сервер-клиент приложение | Яшар | Общие вопросы Delphi | 8 | 30.05.2011 22:27 |
Клиент/сервер приложение | HarmonicMan | Работа с сетью в Delphi | 0 | 27.04.2010 21:51 |
Приложение клиент\сервер с БД | Vol666 | БД в Delphi | 1 | 08.10.2009 12:28 |
Приложение клиент\сервер | Vol666 | Работа с сетью в Delphi | 5 | 08.10.2009 09:06 |
Возможно-ли Клиент-серверное приложение типа Клиент(Pascal) а сервер(CGI)? | Demol | Работа с сетью в Delphi | 1 | 21.04.2009 16:18 |