Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с сокетами !!! 
:(
    Опции темы
Vinnety
  Дата 11.10.2004, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 8.4.2003

Репутация: нет
Всего: нет



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



PM MAIL   Вверх
Akella
Дата 11.10.2004, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



эксперементирую с параметрами
и посмотри какой буфер приема установлен в паракметрах сетевой карты
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.