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

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

вопрос по сокету [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, кажется).


Наверх

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