Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2010, 10:42   #1
Htenez
 
Регистрация: 22.09.2010
Сообщений: 7
Сообщение Проблема с сокетами в Дельфи

Может кто-нибудь сталкивался с подобной проблемой?
У меня программа считывает с сервера информацию через сокет. В зависимости от полученных данных должна генерировать ответное сообщение в текстовом формате. Режим - асинхронный.
Код:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
  var i,n,a,l:integer;
      S1,Mess:String;
begin
  FrmGl.Show;
  FrmGl.FormPaint(FrmGl);
  z:=z+1;
  S:=Socket.ReceiveText;
  i:=1;
  n:=0;
  l:=0;
  Label19.Caption:='';
  For i:=1 to length(S) do
    begin
      if S[i-1]='=' then
            begin
              n:=n+1;
              a:=i;
              S1:='';
              While S[a]<> ')' do
                begin
                  S1:=S1+S[a];
                  l:=Length(S1);
                  if S1[l]='.' then S1[l]:=',';
                  a:=a+1;
                end;
               Label19.Caption:=Label19.caption+S1+#10;
               case n of
                1:T:=StrtoFloat(S1);
                2:R:=StrtoFloat(S1);
                3:M:=StrtoFloat(S1);
                4:RX:=StrtoFloat(S1);
                5:RY:=StrtoFloat(S1);
                6:VRX:=StrtoFloat(S1);
                7:VRY:=StrtoFloat(S1);
                8:TR:=StrtoFloat(S1);
                9:TX:=StrtoFloat(S1);
                10:TY:=StrtoFloat(S1);
                11:TASK:=StrToInt(S1);
                12:POINT:=StrToInt(S1);
                13:FAIL:=StrToInt(S1);
                14:CRASH:=StrToInt(S1);
                15:FUEL:=StrtoFloat(S1);
                16:DONE:=StrToInt(S1);
                17:ERROR:=StrToInt(S1);
                18:IGNORED:=StrToInt(S1);
                end;
             end;
    end;
      if z1 mod 15=0 then
        begin
          Case Task of
         1:Begin
              FrxS:=FloatToStr(RX*200);
              FryS:=FloatToStr(RY*200);
              Mess:='{(FRX='+FrxS+')(FRY='+FryS+')}';
              Socket.SendText(Mess);
              Listbox1.Items.Add(mess);
           end;
         2:Button2.Caption:='2';
         3:Button2.Caption:='2';
         end;
      end;
    z1:=z1+1;
end;
все компилируется, ошибок нет.... но вот когда начинается выполнение программы происходит ошибка здесь:
Код:
Socket.SendText(Mess);
А именно, программа перестает принимать сообщения, пока снова произойдет ClientSocket1.Open.
Причем вот так:
Код:
Socket.SendText('Blablabla');
все спокойно работает ) но мне в таком формате сообщения увы, не нужны
Htenez вне форума Ответить с цитированием
Старый 17.12.2010, 10:50   #2
Htenez
 
Регистрация: 22.09.2010
Сообщений: 7
По умолчанию

Да, вот еще что, последний If нужен только лишь для того, чтоб сообщения не посылались слишком часто(без него программа будет на каждое принятое генерировать исходящее).
Не слишком часто - это не более 10 в секунду.
Htenez вне форума Ответить с цитированием
Старый 17.12.2010, 12:18   #3
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

А вы попробуйте передать уже с подсчитанным значением FrxS и FrуS например
Код:
 Socket.SendText('{(FRX=15,1564)(FRY=23,456)}');
SERG1980 вне форума Ответить с цитированием
Старый 17.12.2010, 12:48   #4
Htenez
 
Регистрация: 22.09.2010
Сообщений: 7
По умолчанию

Я уже разобрался, спасибо за отклик
Это не помогло бы

Дело было в том, что этот...... делфи....... хранит Extended в формате xx,xxxx, а передавать мне необходимо было в формате xx.xxxx то есть с точкой, а не с запятой
Написал вайл один и все работает.

Только теперь от раза к разу возникают исключения типа (Access violiation);
Что с этим можно сделать?
Htenez вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема компиляции в дельфи Jeka_727211 Помощь студентам 2 10.06.2010 17:12
Проблема с сокетами BurningMan Общие вопросы C/C++ 1 06.06.2009 16:10
Дельфи 8. Проблема с кодировкой. Venor Общие вопросы Delphi 1 10.06.2008 20:44
ПРОблема с дельфи by -ORTODOX- Общие вопросы Delphi 10 14.03.2008 18:21
Небольшая проблема с сокетами RoamingFire Работа с сетью в Delphi 3 27.02.2008 22:58