Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TCPClient вторая посылка не проходит


Страницы:   1 2

novichek ©   (2010-05-11 22:29:00) 

клиент:

 if TcpClient1.Connected then TcpClient1.Sendln(edit2.Text);

сервер:

procedure TForm1.TcpServer1Accept(Sender: TObject; ClientSocket: TCustomIpClient);
begin
 edit1.Text:= ClientSocket.Receiveln;
end;

первая отправка строки доходит до сервера, последующте нет, хотя connected клиента True.

добавил:

    TcpClient1.Sendln(edit2.Text);
    TcpClient1.Disconnect;
    TcpClient1.Connect;

стало работать, но это херня рвать установленную связь..
помогите с решением, необходимо один раз законнектится с сервером и в дальнейшем независимо клиент серверу и сервер клиенту что бы могли отправлять сообщения в виде строк...

пока рука не поднимается пробывать на сокетах писать, если готовое решение не могу использовать...


novichek   (2010-05-11 23:50:00) [21]

стало ещё интересней..

procedure TForm1.TcpServer1Accept(Sender: TObject; ClientSocket: TCustomIpClient);
var
 s: String;
begin

 s:= ClientSocket.Receiveln;
 while s<>'' do begin
   edit1.Text:= edit1.Text + s;
   s:= ClientSocket.Receiveln;
 end;
end.

стало теперь принимать и последующие отправки и без setsockopt..


novichek   (2010-05-11 23:43:00) [22]

хм.. там кода пару строк:

procedure TForm1.FormCreate(Sender: TObject);
begin
 TcpServer1.BlockMode:= bmThreadBlocking;
 TcpClient1.BlockMode:= bmBlocking;

 TcpServer1.Active:= true;
 TcpClient1.Active:= true;
 TcpClient1.Connect;
end;

procedure TForm1.TcpClient1Connect(Sender: TObject);
begin
 setsockopt(TTCPClient(Sender).Handle, IPPROTO_IP, TCP_NODELAY, 0,  1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if TcpClient1.Connected then begin
    TcpClient1.Sendln(edit2.Text);
  //  TcpClient1.Disconnect;
  //  TcpClient1.Connect;
 end;
end;

procedure TForm1.TcpServer1Accept(Sender: TObject; ClientSocket: TCustomIpClient);
begin
 edit1.Text:= ClientSocket.Receiveln;
end;


Сергей М.   (2010-05-11 23:34:00) [23]


> всё равно вторая посылка не проходит.

Значит у тебя ошибка в программе.


novichek   (2010-05-11 23:31:00) [24]

procedure TForm1.TcpClient1Connect(Sender: TObject);
begin
 setsockopt(TTCPClient(Sender).Handle, IPPROTO_IP, TCP_NODELAY, 0,  1);
end;

всё равно вторая посылка не проходит...

решил попытать счаcтья на инди (d2007)

var
 myContext: TIdContext;
...

// отправка серверу
procedure TForm1.Button1Click(Sender: TObject);
begin
 if IdTCPClient1.Connected then IdTCPClient1.IOHandler.WriteLn(TimeToStr(time));
end;

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
begin
   myContext:= AContext; // сохранил
   edit1.Text:= AContext.Connection.IOHandler.ReadLn; // прочитал что пришло
end;

теперь пытаюсь со стороны сервера отправить

procedure TForm1.Button2Click(Sender: TObject);
begin
 myContext.Connection.IOHandler.WriteLn(TimeToStr(time));
end;

на клиенте обрабатываю пиём так:

procedure TForm1.IdTCPClient1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
begin
 if AWorkMode = wmRead then begin

    edit2.Text:= 'принял';

 end;
end;

1)  тут не знаю как добраться до входящего буфера\текста
2) один фиг, ставил бряк - управление не приходит

подскажите пожалуйста где торможу..


Сергей М.   (2010-05-11 23:11:00) [25]


> на событии connect'а клиента ?


Да.


> как тут socked вытянуть


TTCPClient(Sender).Handle


> я не чат пишу


Не суть как важно.


novichek   (2010-05-11 23:02:00) [26]

не могли бы вы уточнить, на каком этапе отключать?

на событии connect'а клиента ?

procedure TForm1.TcpClient1Connect(Sender: TObject);
begin
 setsockopt(socked, IPPROTO_IP, TCP_NODELAY, 0,  1); // так ?
end;

только как тут socked вытянуть не могу понять ))

вообще-то я не чат пишу..
просто нужно организовать общение клиентов с сервером путем передачи строк.


Сергей М.   (2010-05-11 22:37:00) [27]

Если ты лепишь чат, то следует отключать алгоритм Нагеля.
По умолчанию он включен.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо