Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.06.2010, 15:42
feramount feramount вне форума
Прохожий
 
Регистрация: 11.06.2010
Сообщения: 2
Репутация: 10
По умолчанию Работа с сокетами

Здраствуйте.Почитал несколько статей по delphi и решали написать чат клиент<>сервер.
Ошибка возникла когда я попытался отправить сообщение серверу.
Сервер ничего не выдает когда в клиенте я нажимаю на кнопку отправить.Но соединение он логирует.
Вот исходные коды.Может кто подскажет.
Сервер
PHP код:
procedure TForm1.FormCreate(SenderTObject);
begin
ServerSocket1
.Port := 777;
ServerSocket1.Active := True;
end;

procedure TForm1.ServerSocket1Accept(SenderTObjectSocketTCustomWinSocket);
var
SString;
begin
{Добавляем к строке сообщения клиента идентификатор его сокета}
:= 'К нам добавился UID ' InTtoStr(Socket.SocketHandle);
ListBox1.Items.Add(S); {Добавляем сообщение в список}
end;

procedure TForm1.ServerSocket1Read(SenderTObjectSocketTCustomWinSocket);
var
aString;
begin
:= 'Клиент ' InTtoStr(Socket.SocketHandle) + 'написал >' Socket.ReceiveText;
ListBox1.Items.Add(a);
        
end;
  
end

Клиент

PHP код:
procedure TForm1.ConnectClick(SenderTObject);
begin
ClientSocket1
.Address := Host.Text;
ClientSocket1.Port := StrToInt(Port.Text);
ClientSocket1.Active := True;
end;

procedure TForm1.SendClick(SenderTObject);
begin
ClientSocket1
.Socket.SendText(Text.Text);
end
Ответить с цитированием
  #2  
Старый 11.06.2010, 17:49
azaznio azaznio вне форума
Прохожий
 
Регистрация: 11.06.2010
Сообщения: 12
Репутация: 10
По умолчанию

В сервере исправь свой код:
Код:
procedure TForm1.ServerSocket1Read(Sender: TObject; Socket: TCustomWinSocket); 
var 
a: String; 
i:=integer;
begin 
for i:=0 to serversocket1.Socket.ActiveConnections-1 do  
a := 'Клиент ' + InTtoStr(Socket.SocketHandle) + 'написал >' + ServerSocket1.Socket.Connections[i].ReceiveTextt; 
ListBox1.Items.Add(a); 
        end; 
  end.  
Admin: Пользуемся тегами!

Вот и всё.

Последний раз редактировалось Admin, 11.06.2010 в 20:40.
Ответить с цитированием
  #3  
Старый 11.06.2010, 18:51
feramount feramount вне форума
Прохожий
 
Регистрация: 11.06.2010
Сообщения: 2
Репутация: 10
По умолчанию

Неа.Все равно не хочет.
Вот когда нажимаю "Подключиться" он подключается и сервер выдает что такой то такой то подключился, но при наборе текста и при нажатии на кнопку "отправить" сервер не выдает никаких действий
Ответить с цитированием
  #4  
Старый 11.06.2010, 19:17
azaznio azaznio вне форума
Прохожий
 
Регистрация: 11.06.2010
Сообщения: 12
Репутация: 10
По умолчанию

Короче вот мой юин: 477064023 помогу
Ответить с цитированием
  #5  
Старый 01.09.2010, 21:51
Аватар для Sevas
Sevas Sevas вне форума
Прохожий
 
Регистрация: 17.06.2009
Сообщения: 20
Репутация: 10
По умолчанию

Сделал сервер с помощью ServerSocket, на который отправляется текстовая строка вида
Код:
500 12.01
Два числа, первое целое, второе с точкой, с заранее неизвестной длиной всей строки.
из этой строки мне нужно приравнять
IAS = 500
tNext = 12.01


Код:
procedure Tf_main.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  i,text_len, probel :integer;
  IAS: real;
  text  : widestring;
  x,y,z,r : double;
  X_string,Y_string,Z_string, R_string,tNext,IAS_string: string;
begin

      text_len := length(Socket.ReceiveText);//получаем длину всей строки
      text := (Socket.ReceiveText); //сама строка 

      for i := 0 to text_len do
        if text[i] = ' ' then probel := i; //ищем где находится пробел

      IAS   := strtofloat(copy (text,0,probel - 1)); //IAS = всё что до пробела 
      tNext := (copy (text,probel + 1,text_len));   //tNext = всё что после пробела

но при получении строки, вылазит ошибка в строке, выделенную красным.



Если этот же алгоритм прогонять со строкой взятой из Edit`a то всё работает.
В чём может быть проблема?

Последний раз редактировалось Sevas, 01.09.2010 в 21:55.
Ответить с цитированием
  #6  
Старый 01.09.2010, 23:16
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Во первых, судя по алгоритму, ты ищешь последний пробел в тексте? Непонятно зачем...
Во вторых, индексация символов в строках начинается с единицы.
В третьих, функция Pos() решила бы проблему с поиском пробела, более адекватным способом)
Ответить с цитированием
  #7  
Старый 01.09.2010, 23:29
Аватар для Sevas
Sevas Sevas вне форума
Прохожий
 
Регистрация: 17.06.2009
Сообщения: 20
Репутация: 10
По умолчанию

В строке 100% только один пробел, поэтому просто его ищу по строке.
с Pos попробую.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025