Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Проблема с сокетами !!!


Автор: Vinnety 11.10.2004, 11:54
stena.gif Help! Нужна помощь.
Есть две программы: одна - сервер, вторая - клиент.
Клиент отсылает данные, сервер - эти данные принимает.

На клиенте я формирую две записи (служебные)и массив данных (всё это я хочу
передать серверу), далее с помощью move я объедению в единый блок памяти,
а потом отсылаю:

Код

const
 n = 3;

type
 TCode = longint;
 TData = double;
 TAction = integer;

 TPack1 = packed record
  Code : TCode;
  Data : TData;
  Action : TAction;
 end;

 TPack2 = packed record
  Code : TCode;
  Data : TData;
 end;

 TArrPack  = array of TPack2;


var
 i,size1, size2, size3 : integer;
 Pack1 : TPack1;
 Pack2 : TPack2;
 ArrPack : TArrPack;
 p : array of byte;

begin
 size1:=sizeof(TPack1);
 size2:=sizeof(TPack2);
 size3:=n*sizeof(TPack2);

 Pack1.Code:=111; Pack1.Data:=222; Pack1.Action:=333;
 Pack2.Code:=444; Pack2.Data:=555;

 randomize;
 SetLength(ArrPack,n);
 for i:=0 to n-1 do
  begin
   ArrPack[i].Code:=i+1;
   ArrPack[i].Data:=10+random(2000);
  end;

Size:=size1+size2+size3;
SetLength(P,Size);
move(X1,P[0],Count1);
move(X2,P[Count1],Count2);
move(X3,P[Count1+Count2],Count3);
Socket.SendBuf(P[0],Size);

end;


На сервере я принимаю данные:

Код

type
TCode = longint;
TData = double;
TAction = integer;

TPack1 = packed record
  Code : TCode;
  Data : TData;
  Action : TAction;
 end;

 TPack2 = packed record
  Code : TCode;
  Data : TData;
 end;

 TArrPack  = array of TPack2;

var
  i,j,size1, size2, size, size3 : integer;
 Pack1 : TPack1;
 Pack2 : TPack2;
 ArrPack : TArrPack;

begin

size:=Socket.ReceiveLength;
size1:=sizeof(TPack1);
size2:=sizeof(TPack2);
size3:=size-size1-size2;

SetLength(ArrPack,size3 div size2);

Socket.ReceiveBuf(Pack1,size1);
Socket.ReceiveBuf(Pack2,size2);
Socket.ReceiveBuf(ArrPack[0],size3);

finalize(ArrPack);

end;


ВОПРОС: когда клиент посылает данные (например, нажал кнопку ОТПРАВИТЬ), данные приходять
на сервер, но потом сразу же возникает ошибка (бывает не сразу - надо бысто несколько
раз на клиентской стороне нажать кнопку ОТПРАВИТЬ) и разрывается связь.

Ошибка такого плана:
Windows socket error : Невозможно выполнить операцию на сокете, т.к. буфер слишком
мал или очередь переполнена (10055), on API 'recv'.

ПОМОГИТЕ, ПОЖАЛУЙСТА! qstn.gif



Автор: Akella 11.10.2004, 12:55
эксперементирую с параметрами
и посмотри какой буфер приема установлен в паракметрах сетевой карты

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)