![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обьеденить две области памяти
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;