Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Вниз

Помогите с сокетом   Найти похожие ветки 

 
Big Joe ©   (2005-08-10 07:47) [0]

Привет всем ! Помогите пожалуйста тупому студенту с вопросам.
Мне задали задачу где должны быть две программы клиент и сервер.В клиентной части должно быть одна кнопка и один Edit
При нажатии кнопки на серверной части должно отобразиться в виде
сообщения текст с Edit-а. Заранее спасибо.


 
Bekzhan   (2005-08-10 08:42) [1]

{... Здесь идет заголовок файла и определение
   формы TForm1 и ее экземпляра Form1}

   procedure TForm1.Button1Click(Sender: TObject);
   begin
     {Определяем порт и запускаем сервер}
     ServerSocket1.Port := 1025;
     {Метод Insert вставляет строку в массив в указанную позицию}
     Memo2.Lines.Insert(0,"Server starting");
     ServerSocket1.Open;
   end;
 
   procedure TForm1.Button2Click(Sender: TObject);
   begin
     {Останавливаем сервер}
     ServerSocket1.Active := False;
     Memo2.Lines.Insert(0,"Server stopped");
   end;
 
   procedure TForm1.ServerSocket1Listen(Sender: TObject;
     Socket: TCustomWinSocket);
   begin
     {Здесь сервер "прослушивает" сокет на наличие клиентов}
     Memo2.Lines.Insert(0,"Listening on port "+IntToStr(ServerSocket1.Port));
   end;
 
   procedure TForm1.ServerSocket1Accept(Sender: TObject;
     Socket: TCustomWinSocket);
   begin
     {Здесь сервер принимает клиента}
     Memo2.Lines.Insert(0,"Client connection accepted");
   end;
 
   procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
     Socket: TCustomWinSocket);
   begin
     {Здесь клиент подсоединяется}
     Memo2.Lines.Insert(0,"Client connected");
   end;
 
   procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
     Socket: TCustomWinSocket);
   begin
     {Здесь клиент отсоединяется}
     Memo2.Lines.Insert(0,"Client disconnected");
   end;
 
   procedure TForm1.ServerSocket1ClientError(Sender: TObject;
     Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
     var ErrorCode: Integer);
   begin
     {Произошла ошибка - выводим ее код}
     Memo2.Lines.Insert(0,"Client error. Code = "+IntToStr(ErrorCode));
   end;
 
   procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
     Socket: TCustomWinSocket);
   begin
     {От клиента получено сообщение - выводим его в Memo1}
     Memo2.Lines.Insert(0,"Message received from client");
     Memo1.Lines.Insert(0,"> "+Socket.ReceiveText);
   end;
 
   procedure TForm1.ServerSocket1ClientWrite(Sender: TObject;
     Socket: TCustomWinSocket);
   begin
     {Теперь можно слать данные в сокет}
     Memo2.Lines.Insert(0,"Now can write to socket");
   end;
 
   procedure TForm1.ServerSocket1GetSocket(Sender: TObject; Socket: Integer;
     var ClientSocket: TServerClientWinSocket);
   begin
     Memo2.Lines.Insert(0,"Get socket");
   end;
 
   procedure TForm1.ServerSocket1GetThread(Sender: TObject;
     ClientSocket: TServerClientWinSocket;
     var SocketThread: TServerClientThread);
   begin
     Memo2.Lines.Insert(0,"Get Thread");
   end;
 
   procedure TForm1.ServerSocket1ThreadEnd(Sender: TObject;
     Thread: TServerClientThread);
   begin
     Memo2.Lines.Insert(0,"Thread end");
   end;
 
   procedure TForm1.ServerSocket1ThreadStart(Sender: TObject;
     Thread: TServerClientThread);
   begin
     Memo2.Lines.Insert(0,"Thread start");
   end;
 
   procedure TForm1.Button3Click(Sender: TObject);
    var i: Integer;
   begin
     {Посылаем ВСЕМ клиентам сообщение из Edit1}
     for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do begin
      ServerSocket1.Socket.Connections[i].SendText(Edit1.Text);
     end;
     Memo1.Lines.Insert(0,"< "+Edit1.Text);
   end;


 
Digitman ©   (2005-08-10 09:50) [2]

примерно так :

1. на кл.стороне - компонент TClientSocket со след.свойствами :

- ClientType = ctBlocking
- Address = строковое представление IP-адреса, по которому ожидается активность серверной части, например, "127.0.0.1"
- Port = номер порта, который использует сервер для прослушивания входящих запросов

по нажатию на кнопку :

var Cnt: Integer;

with ClientSocket do begin
Open;
try
  Cnt := Length(Edit.Text);
  Socket.SendBuf(Cnt, SizeOf(Cnt));
  Socket.SendBuf(PChar(Edit.Text)^, Cnt);
finally
 Close;
end;
end;

2. на серв.стороне - компонент TServerSocket со след.свойствами :

- stServerType = stNonBlocking;
- Port = предпочтительный номер порта для прослушивания вх.запросов
- Active = True

//статические переменные
var
 s: String;
 Cnt, BytesRead: Integer;
 BytesLeftToRead: Integer = SizeOf(Cnt);
 State: Integer;

в обработчике события ServerSocket.OnClientRead:

 with Socket do begin
  case State of
   0: begin //режим приема длины строки
       BytesRead := ReceiveBuf(PByteArray(@Cnt)[SizeOf(Cnt) - BytesLeftToRead]^, BytesLeftToRead);
       Dec(BytesLeftToRead, BytesRead);
       if BytesLeftToRead = 0 then //длина строки принята полностью
         begin
           State := 1; //переход в режим приема самой строки
           BytesLeftToRead := Cnt;
           SetLength(s, Cnt);
         end;
      end;
   1: begin //режим приема самой строки
       BytesRead := ReceiveBuf(s[Cnt - BytesLeftToRead + 1], BytesLeftToRead);
       Dec(BytesLeftToRead, BytesRead);
       if BytesLeftToRead = 0 then //строка принята полностью
         begin
           State := 0; //переход в режим приема длины строки
           BytesLeftToRead := SyzeOf(Cnt);
           ShowMessage(s); //покажем принятую строку
         end;        
      end;
  end;  
 end;



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
14-1130462615
Джо
2005-10-28 05:23
2005.11.20
Ох, нелегкая это работа...


4-1127286555
IceBeerg
2005-09-21 11:09
2005.11.20
Hook из приложения


2-1130407093
Ольга
2005-10-27 13:58
2005.11.20
Ошибка при создании XMLDoc


14-1130356032
American
2005-10-26 23:47
2005.11.20
Какую версию предпочесть: 6, 7 или 2005


3-1128941214
alex_1234
2005-10-10 14:46
2005.11.20
ADO, dBASE, create table: ошибка синтаксиса при определении поля.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский