Снова мучаюсь с сокетами, не могу передать запись через сокет, вот мои класы и процедуры обработки:
класс и константы
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>>