![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вопрос по сокету [D5, WinXP]
kibork © (2004-06-20 22:44:00)кто знает точно?* Отправляем текст по сокету...
например Socket.SendText('hello to all');
сокет запомнит длинну текста или нет?* Ну тоисть если потом послать еще текст до того как клиент прочитал это то будут два куска или один?*
McZim (2004-06-28 12:13:00) [1]вот тебе нормальный сендер по отсылке мессаг по сокетам, но и он не запомнит:
procedure TForm1.Button1Click(Sender: TObject);
begin
{Если соединение уже установлено - прерываем его.}
if ClientSocket1.Active then begin
ClientSocket1.Close;
Exit; {...и выходим из обработчика}
end;
{Присваиваем свойствам Host и Port нужные значения}
ClientSocket1.Host := Edit1.Text;
ClientSocket1.Port := StrToInt(Edit2.Text);
{Пытаемся открыть сокет и установить соединение}
ClientSocket1.Open;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
{Как только произошло соединение - посылаем приветствие}
Socket.SendText('Hello!');
ListBox1.Items.Add('< Hello!');
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
{Если пришло сообщение - добавляем его в ListBox}
ListBox1.Items.Add('> '+Socket.ReceiveText);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
{Нажата кнопка - посылаем текст из третьего TEdit}
ClientSocket1.Socket.SendText(Edit3.Text);
ListBox1.Items.Add('< '+Edit3.Text);
AngelOKES (2004-06-22 11:04:00) [2]Удалено модератором
Digitman (2004-06-22 10:27:00) [3]
> AngelOKES
ну ты странный товарисч, однако ...
> Подскажите как сервер
> нашел способ попроще
ты считаешь, что все вокруг должны с полуслова догадываться о том, ЧТО ты подразумеваешь под "сервером" ? Или для тебя не существует никакого иного "сервера", кроме как TServerSocket-компонент ?
AngelOKES (2004-06-22 10:19:00) [4]Спасибо за ответ, но я нашел способ попроще:
IpClient:=Socket.RemoteAddress; Возвращает IP клиента
IpServer:=Socket.LocalAddress; Возвращает IP сервера
Digitman (2004-06-22 08:42:00) [5]
> AngelOKES (22.06.04 08:32) [12]
куда уж подробнее ..
открываешь справку для ф-ции accept(), читаешь описание параметров, далее открываешь модуль winsock.pas, ищешь декларацию структуры TSockAddr - и все как на ладони ...
AngelOKES (2004-06-22 08:32:00) [6]Можно поподробнее
Digitman (2004-06-22 08:12:00) [7]
> AngelOKES
функция winsock.accept() при успешном выполнении записывает по адресу, переданному 2-м параметром, данные со структурой TSockAddr, одно из полей которой содержит IP-адрес клиента
AngelOKES (2004-06-22 08:06:00) [8]Удалено модератором
Digitman (2004-06-21 09:14:00) [9]
> если потом послать еще текст до того как клиент прочитал
> это то будут два куска или один?
на этот счет не следует делать никаких предположений - "кусков" может быть и один, и два, и косой десяток ..
важно то, что последовательность отправляемых данных в точности соответствует последовательности принимаемых данных
иными словами, если передатчик выполняет, например
sendtext('ABCD')
sendtext('EFGH')
то приемник может получить и
AB
CDE
F
GH
и
AB
C
D
E
FG
H
и любую иную комбинацию "кусков"
временная последовательность передачи данных в точности соответствует временной последовательности приема передаваемых данных
Amoral (2004-06-21 05:11:00) [10]<<Кирюша (21.06.04 01:41) [7]
пошли куда подальше Маст дай с его глюками и вернитесь к тихому и доброму ДОсу
>>Это тебя надо послать куда подальше
//
<<kibork © (20.06.04 22:44)
Ну тоисть если потом послать еще текст до того как клиент прочитал это то будут два куска или один?*
>>При каждой отправке "текста" через сокет методом Socket.SendText(msg:string); будет посылаться только msg.
Кирюша (2004-06-21 01:41:00) [11]Удалено модератором
Примечание: 3 дня R/O
Кирюша (2004-06-21 01:39:00) [12]Удалено модератором
Кирюша (2004-06-21 01:38:00) [13]Удалено модератором
Кирюша (2004-06-21 01:37:00) [14]Удалено модератором
Кирюша (2004-06-21 01:35:00) [15]Удалено модератором
Rouse_ (2004-06-20 23:24:00) [16]Нет не запомнит, это Stream и ни что иное... разделять сам должен...
Cardinal (2004-06-20 22:57:00) [17]>Ну тоисть если потом послать еще текст до того как клиент >прочитал это то будут два куска или один?*
Точно сказать не могу, но, наверное, это будет один кусок (receivetext, кажется).