![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Asynchronous socket error 10053 [D6, NT4]
{bas} © (2002-09-04 16:48:00)Привет! Начал делать, что-то вроде простого прокси и возникает такая ошибка. Кто-то может сказать с чем она связана и как лечится. Делаю я так: есть Серверсокет и клиент сокет.
При ображение к сокету сервера я пишу так
procedure TForm1.ss_MainClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
rt : string;
begin
rt := Socket.ReceiveText;
Memo1.Lines.Add(rt);
cs_Main.Socket.SendText(rt);
end;
При ображение к сокету клиента я пишу так
procedure TForm1.cs_MainRead(Sender: TObject; Socket: TCustomWinSocket);
var
i, size : integer;
rt : string;
buffer : PByteArray;
begin
size := 10024*64;
try
GetMem(buffer, size);
size := Socket.ReceiveBuf(buffer^, size);
for i:=0 to ss_Main.Socket.ActiveConnections-1 do
begin
ss_Main.Socket.Connections[i].SendBuf(buffer^, size);
// вот здесь возникает ошибка
end;
finally
FreeMem(buffer);
end;
end;
Причем ошибка возникает не всегда(но переодично), а после нескольких вызовов cs_MainRead( т.е. onClientSocketRead). И возникает еще одна ошибка(то же не всегда, но переодично) Windows Socket error: (10054), on API "send"
В чем дело или что я делаю не правильно??
P.S. Клиентом я вляется IExplorer
cyborg (2002-09-17 10:36:00) [1]REA предлагаю всётаки указывать версию Дельфи, когда говорите о глюках!
VID (2002-09-16 19:20:00) [2]to {bas}: замени TByteArray на PChar+предыдущие пункт (3) и (4);
{bas} (2002-09-16 18:34:00) [3]to REA
скинь тогда я посмотрю
REA (2002-09-16 17:39:00) [4]Родные компоненты Delphi глючные - я нашел в свое время 3-5 ошибок, некоторые из которых даже объяснимы и легко воспроизводимы. Смотреть по коду как я это обходил - лениво.
{bas} (2002-09-16 15:24:00) [5]to VID
1. Asynchronous socket error 10053
2. Сейчас клиент только IE
3. заменил
4. убрал
5. см. п.2
если не в сложно посмотреть я м.б. прислать исходники??
VID (2002-09-13 20:54:00) [6]1. Какая ошибка возникает после ss_Main.Socket.Connections[i].SendBuf(buffer^, size) ?
2. Когда возникают ошибки: в ситуации когда клиент - IE, или когда клиент - твоё клиентское приложение ?
3. Строку size := Socket.ReceiveBuf(buffer^, size); замени на size := Socket.ReceiveLenght;
4. Строку size := 10024*64; удали вообще
5. Если клиент <> IE, то что ты вообще отсылаешь с помощью клиента ? Кучу пакетов ?
{bas} (2002-09-13 13:26:00) [7]to VID
Сделал как написано все равно то-же самое
непойму в чем дело????
VID (2002-09-12 19:44:00) [8]TO {bas}:
Или может так:
Size := Socket.ReceivedLength;
+ мой первый совет.
cyborg (2002-09-12 13:12:00) [9]Да, а что у тебя в буфере-то? Мусор отправляешь?
cyborg (2002-09-12 13:10:00) [10]size := 10024*64;
??? 626,5 килобайт
исправь на 1024
Возможно буфер отсылки переполняется, вот и вылязят ошибки, хотя что за ошибка я незнаю.
FreeMem(buffer);
Думаю лучше так: FreeMem(buffer,size);
{bas} (2002-09-11 15:29:00) [11]помогитееееееееееееееееее
{bas} (2002-09-10 20:37:00) [12]Извиняюсь, что долго не отвечал, но это не помогает
все равно выдает те же ошибки
VID (2002-09-08 22:44:00) [13]Что ты делаешь с помощью этого IE ? какой пакет отсылаешь ?
Думаю имеет смысл, сделать такую проверку:
for i:=0 to ss_Main.Socket.ActiveConnections-1 do
IF ss_Main.Socket.Connections[i]<>nil then
ss_Main.Socket.Connections[i].SendBuf(buffer^, size);
Проверь этот вариант.