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

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

Как обьеденить две области памяти


Страницы:   1 2

alex-drob ©   (2008-06-01 13:44:00) 

Задача следующая.
есть структура aи b
мне нужно их передать по tcp за один приём чтобы они шли подрят непрерывно. как это сделать?


ага0   (2008-06-03 15:21:00) [1]


> Сергей М. ©   (03.06.08 14:02) [26]


> Череп не жмет ?)

А ты пошто интересушься? Имешь с ентим проблемс?

> В теме ни слова про Windows)

В теме и за компоненты ни гу-гу. мне нужно их передать по tcp за один приём- баста.


alex-drob   (2008-06-03 15:01:00) [2]

пытаюсь клиента типа mailagent написать! но с сетью не когда не работал! просто два запроса послал, а на третий нужно было послать структуру и строку за ней!


DiamondShark   (2008-06-03 14:46:00) [3]


> alex-drob   (03.06.08 14:35) [28]

А, если не секрет, зачем это было нужно?
TCP -- это такая штука, которая передаваемые данные может склеивать и фрагментировать как угодно, вне зависимости от того, какими фрагментами они посылаются.
Соответственно, все прикладные протоколы поверх TCP должны быть рассчитаны на то, чтобы передающий и приёмный конец могли передавать данные любыми порциями, вплоть до экстремальных -- от слепленных в один большой кусок, до порезанных на отдельные байты.


alex-drob   (2008-06-03 14:35:00) [4]


> DiamondShark ©   (03.06.08 14:19) [27]

Спасибо! Так тоже работает!


DiamondShark   (2008-06-03 14:19:00) [5]


> мне нужно их передать по tcp за один приём чтобы они шли
> подрят непрерывно. как это сделать?

Передать одну структуру, потом передать другую структуру.


Сергей М.   (2008-06-03 14:02:00) [6]


> ага0   (03.06.08 13:06) [25]


> WsaSend и все дела


Череп не жмет ?)
В теме ни слова про Windows)


ага0   (2008-06-03 13:06:00) [7]


>Куча лишних и/или бестолковых/вредных телодвижений.


Эт точна. WsaSend и все дела.


Сергей М.   (2008-06-03 12:58:00) [8]


> alex-drob   (03.06.08 12:54) [23]


Нет, именно для SendStream она, конечно, не лишняя, хотя проще и наглядней вместо нее использовать

ms.Position := 0;


alex-drob   (2008-06-03 12:54:00) [9]

каких?

ms.Seek(0,0); - этих?


Сергей М.   (2008-06-03 12:20:00) [10]


> ms:=tmemorystream.Create;
>  ms.SetSize(sizeof(mph)+length(buf));
>  ms.Seek(0,0);
>  ms.Write(mph,sizeof(mph));
>  ms.Write(login_len,4);
>  ms.Write(login,length(login));
>  ms.Write(pass_len,4);
>  ms.Write(pass,length(pass));
>  ms.Write(stat,4);
>  ms.Write(cl_len,4);
>  ms.Write(cl,length(cl));
>  ms.Seek(0,0);


Куча лишних и/или бестолковых/вредных телодвижений.

ms:=tmemorystream.Create;
ms.WriteBuffer(mph, SizeOf(mph));
ms.WriteBuffer(login_len, SizeOf(login_len));
ms.WriteBuffer(PChar(login)^, Length(login));
ms.WriteBuffer(pass_len, SizeOf(pass_len));
ms.WriteBuffer(PChar(pass)^, Length(pass));
ms.WriteBuffer(stat, SizeOf(4));
ms.WriteBuffer(cl_len, SizeOf(lc_len));
ms.WriteBuffer(PChar(cl)^, Length(cl));
ms.SendStream(ms);


alex-drob   (2008-06-03 12:11:00) [11]

всё! разобрался!

ms.Write( PChar(login)^,length(login));

ms.Write( har(pass)^,length(pass));

ms.Write( har(cl)^,length(cl));


alex-drob   (2008-06-03 11:59:00) [12]


> Сергей М. ©   (03.06.08 11:51) [19]



> Умищ   (03.06.08 11:42) [17]


Спасибо! и так и так заработало!

У меня ещё вопрос, пробовал без buf и buf2 в tmemorystream не получилось,

ms:=tmemorystream.Create;
 ms.SetSize(sizeof(mph)+length(buf));
 ms.Seek(0,0);
 ms.Write(mph,sizeof(mph));
 ms.Write(login_len,4);
 ms.Write(login,length(login));
 ms.Write(pass_len,4);
 ms.Write(pass,length(pass));
 ms.Write(stat,4);
 ms.Write(cl_len,4);
 ms.Write(cl,length(cl));
 ms.Seek(0,0);


тоесть получилось на половину!

вот эти данные ms.Write(mph,sizeof(mph)); нормально выводяться

и цифровые, а там где строку запуздыриваю, там потом не те байты выводяться!


Сергей М.   (2008-06-03 11:51:00) [13]

tcpc.SendBuf(PChar(buf2)^, Length(buf2));


alex-drob   (2008-06-03 11:49:00) [14]

tcpc: TTcpClient;
buf2: string


Сергей М.   (2008-06-03 11:42:00) [15]


> alex-drob   (03.06.08 11:20) [14]


Кто такой tcpc и как объявлен buf2 ?


Умищ   (2008-06-03 11:42:00) [16]


> alex-drob   (03.06.08 11:38) [15]
> ERROR: Pointer type required


@Buf2[1]


alex-drob   (2008-06-03 11:38:00) [17]

ERROR: Pointer type required


alex-drob   (2008-06-03 11:20:00) [18]

ERROR: Pointer type required


Slym   (2008-06-03 05:24:00) [19]

tcpc.SendBuf( @buf2[0]^,length(buf2));?


alex-drob   (2008-06-03 01:45:00) [20]

type
TData = packed array[0..3] of byte;

buf, buf2: string;
login_len,pass_len,cl_len:tdata;

login,pass,cl:string;


Страницы:   1 2

Наверх

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