Передача структур данных через сокет
От: BazaroffMA  
Дата: 19.12.07 15:33
Оценка:
Снова мучаюсь с сокетами, не могу передать запись через сокет, вот мои класы и процедуры обработки:

класс и константы
const

cmdAuth = 1;
cmdMessage = 2;
cmdExit = 255;

  type TNetPack = record
    Cmd:byte;
    UserID: ShortString;
    Pswd: ShortString;
    Param1:String;
  end;


Процедура авторизации
procedure TfrmClient.btnAuthClick(Sender: TObject);
var NetPack:TNetPack;
begin
  // Авторизация
  NetPack.Cmd:=cmdAuth;
  NetPack.UserID:=String(edUsername.Text);
  ClientSocket1.Socket.SendBuf(NetPack,SizeOf(NetPack));
end;


Отсылка сообщения серверу

procedure TfrmClient.Button2Click(Sender: TObject);
var buf:TNetPack;
begin
  Buf.Cmd:=cmdMessage;
  Buf.Param1:=String(edTextToSend.Text);
  ClientSocket1.Socket.SendBuf(Buf,SizeOf(Buf));
end;



Обработка сообщения сервером

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
 ClientID:integer;
 buf:TNetPack;
begin
  // Получены данные от клиента
  ClientID:=GetClientIDBySocketHandle(Socket.Handle);
  Socket.ReceiveBuf(Buf,Socket.ReceiveLength);
  case Buf.Cmd of
  { Регистрация пользователя }
  cmdAuth:
      begin
        if ClientID > -1 then TTUsers[ClientID]:=Buf.UserID;
        UpdateUserList;
      end;
  { Текстовое сообщение серверу }
  cmdMessage:
      begin
        mmLog.Lines.Add(
        TTUsers[ClientID]+': '+
        Buf.Param1
        )
      end;
  end;


Когда делаю сервер и клиент на одной форме все отлично работает, а если делаю клиент отдельно, то при авторизации все нормально а при приеме сообщения Accec violation

помогите разобраться
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.