type
ClientBlock = class(TObject)
icbm: IpCoBaMo; // 소켓 클래스 정의 해 놓은 유닛
constructor create;
destructor destroy;
end;
일단 위의 클래스는 서버에 접속하는 클라이언트마다 에러체크를 다르게
하기 위해 선언한 클래스입니다.
메세지를 보낼때는,,
cb := ClientBlock(Socket.Data); 이런형태로 선언해 주고,
cb.icbm.Send(Socket, _msg, buf, size); 이라인을 실행시킵니다.
위 라인은 Sendtext 와 유사한 기능을 갖습니다.
제가 원하는건 저렇게 하니깐, 일대일로만 통신이 되는군여.. 일대다는
안되구..
그래서, cb 안에다가 ClientBlock(ServerSocket1.Socket.Connections[ ]); 이런형태로 넣어주기도
해보았습니다.. 근데, 안되는군여.. 메모리 번지수 에러나면서...
그러니깐,, 원래 아래와 같은 루틴을..
for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do begin
ServerSocket1.Socket.Connections[i].sendtext('흑흑');
end;
이런식으루 바꾸었지요.. 물론 안됩니다... -_-;;
for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do begin
sb := clientblock(ServerSocket1.Socket.Connections[i]);
sb.icbm.Send(Socket, _msg, buf, size);
end;
sb 아래에다가 icbm.Send 를 상속시켜 각기 다른 클라인트들에게 주루룩
보내는 방법이 있을까요?
ServerSocket1.Socket.Connections[i].sendtext('message'); 이 방법 말구요..
고수님들.. 제가 질문을 잘 못하겠는데.. 이해하시겠죠? 제가 무슨 말 하는지.. ㅜㅜ;;
혹시나 질문있으시면 하십쇼... ㅜㅜ
ps) 아래는 클라이언트들에게 메세지를 되돌려 보내주는 부분입니다.
.
.
.
.
.
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
// Socket.Data 를 뒤져보니 Pointer 값이더군여..
if Socket.Data = nil then exit;
// 접속하는 클라이언트마다 에러처리를 해주기 위해 cb 로 잡았습니다.
// 즉 Socket.Data 로 각각의 클라이언트를 알아내는거 같구여..
cb := ClientBlock(Socket.Data);
// _msg 값은 상수
case _msg of
CT_SE_CONNECT: begin
_msg := CT_SE_CONNECTOK;
cb.icbm.Send(Socket, _msg);
end;
CT_GE_TALKSEND: begin
_msg := CT_GE_TALKSENDOK;
buf := Pchar(cb.icbm.buf);
// 바로 이부분인데요..
for i:=0 to ServerSocket1.Socket.ActiveConnections-1 do begin
// 이거는 Socket.sendtext('몰라몰라'); 형태와 비슷합니다.
// 그런데, Socket.sendtext 는 ServerSocket1.Socket.Connections[i].sendtext 형태로 보내주기땜에, 각각의 클라이언트로 메세지를 나눠주는게 가능하지만,, 제껀 무조건 그 cb 해당값의 클라이언트에게만,, 메세지가 가는군요...
cb.icbm.Send(Socket, _msg, buf, size);
end;
end;
.
.
.