Q&A

  • 1:1채팅 프로그램에 관하여
델파이 시작 3일째 초보입니다.
1:1 채팅 프로그램을 만드는 중입니다.
서버 프로그램 하나와 클라이언트 프로그램을 만드는데
클라이언트에 SockClient1 소켓을
서버에서 SockServer1 소켓을 사용했습니다.
클라이언트에서 서버로 연결을 한후에 메시지를 전송하면 서버에서 메시지를 RichEdit에서 볼수 있도록 하는데까지는 했는데 서버에서 클라이언트로 메시지 전송을 하는건 못하겠군요..

클라이언트에서 서버로 보낼때는 다음과 같이 하는데요
ClientSocket1.Socket.SendText(Str)

서버에서 할때는 어떤식으로 해야하는지요..
ServerSocket1.Socket.???

서버에서 메시지를 받을때는
var
  Str : string;
이런식으로 합니다.
클라이언트에서 메시지를 받을때는 어떤식으로 하는지요?>


밑에 소스 올립니다.



클라이언트
{--------------------------------------------------------------------------}
procedure TForm1.FormCreate(Sender: TObject);
begin
    //ClientSocket1.Active := False;

end;

{--------------------------------------------------------------------------}
procedure TForm1.FormShow(Sender: TObject);
begin

end;

{--------------------------------------------------------------------------}
//연결버튼 클릭
procedure TForm1.BtnConnClick(Sender: TObject);
begin
    ClientSocket1.Address := EdtIP.Text;
    ClientSocket1.Port := 789;
    ClientSocket1.Active := True;
end;

{--------------------------------------------------------------------------}
//전송버튼 클릭(에디트박스내용을 서버로 보낸다.)
procedure TForm1.BtnSendClick(Sender: TObject);
var
  Str : string;

begin
  Str := EdtMessg.Text;
    ClientSocket1.Socket.SendText(Str);
    EdtMessg.Text := '';
    RichEdit1.SelAttributes.Color := clBlack;
    begin
      if Form1.ClientSocket1.Socket.Connected then RichEdit1.Lines.Add(Str);
    end;
end;


{--------------------------------------------------------------------------}
//서버로부터 메시지 받기
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  Str : string;
begin
//  Str := Socket.ReceiveText;
  Str := Form1.ClientSocket1.Socket.ReceiveText;
  RichEdit1.Lines.Add(Str);
end;

{--------------------------------------------------------------------------}
//종료버튼 클릭(소켓종료,폼닫기)
procedure TForm1.Button1Click(Sender: TObject);
begin
  if ClientSocket1.Active then ClientSocket1.Close;

  Form1.Close;
end;

{--------------------------------------------------------------------------}
//ClientSocket1 : 서버에 연결
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  ServerAddress,ConnectTime : string;
begin
  ServerAddress := Socket.RemoteAddress;
  ConnectTime := DateTimetoStr(Now);
  RichEdit1.SelAttributes.Color := clRed;
  RichEdit1.Lines.Add('서버(' + ServerAddress + ')에 연결되었습니다.');
  RichEdit1.Lines.Add('연결시각 : ' + ConnectTime );
end;















서버
{--------------------------------------------------------------------------}
procedure TForm1.FormCreate(Sender: TObject);
begin
    ServerSocket1.Active := True;

end;


{--------------------------------------------------------------------------}
procedure TForm1.FormShow(Sender: TObject);

begin

end;


{--------------------------------------------------------------------------}
//연결 : 클라이언트가 연결됨
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  ClientAddress, ClientConnectDateTime  : string;

begin
    ClientAddress:=Socket.RemoteAddress;
    ClientConnectDateTime:=DateTimetoStr(Now);
    RichEdit1.SelAttributes.Color := clRed;
    //RichEdit1.SelAttributes.Color := clBlue;
    RichEdit1.Lines.Add('클라이언트 (' + ClientAddress + ')가 연결되었습니다');
    //RichEdit1.Lines.Add('접속시간 : ' + ClientConnectDateTime);

  

end;

{--------------------------------------------------------------------------}
//종료 : 클라이언트가 연결을 종료함
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  DisConnectAddress : string;
begin
  DisConnectAddress := Socket.RemoteAddress;
  RichEdit1.SelAttributes.Color := clRed;
  RichEdit1.Lines.Add ('종료' + DisConnectAddress +'-->' + DateTimetoStr(now));
end;

{--------------------------------------------------------------------------}
//클라이언트에서 받은 메시지를 RichEdit에서 보여준다
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  Str : string;
begin
   Str := Socket.ReceiveText;
   RichEdit1.SelAttributes.Color := clBlack;
   RichEdit1.Lines.Add(Str);
end;


{--------------------------------------------------------------------------}

{--------------------------------------------------------------------------}
//종료버튼클릭
procedure TForm1.Button3Click(Sender: TObject);
begin
    if ServerSocket1.Active then
    begin
        ServerSocket1.Close;
    end;

    Form1.Close;

end;
{--------------------------------------------------------------------------}
//전송버튼클릭
procedure TForm1.Button1Click(Sender: TObject);
var
  Str : string;

begin
  Str := Edit1.Text;

end;



1  COMMENTS
  • Profile
    신동묵 2002.12.05 03:47
    C:Program FilesBorlandDelphi6DemosInternetchat
    를 보시면 예제가 있습니다. 저두 첨에 이것을 보고 연습했습니다.
    그럼 즐프하세요.

    • 김재욱
    • 2002.12.05 06:40
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김영철
      2002.12.06 02:50
      고생이 많으시네요.. 한 폼안에 여러개의 table과 Query 컴포넌트 존재가 가능하지요. 마치 editbox가 여...
    • 김종균
      2002.12.05 08:28
      한 폼안에서 테이블 컴포넌트와 쿼리 컴포넌트를 사용 할 수 있어요 어차피 쿼리문을 사용할 거라면 굳...
    • 김영철
      2002.12.06 02:46
      query1.parameters.ParamByName('name').value := dbedit1.text; => query1.ParamByName('name').asStr...
    • 이승필
    • 2002.12.05 04:17
    • 0 COMMENTS
    • /
    • 0 LIKES
    • Yellena
    • 2002.12.05 02:33
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최은석
      2002.12.05 03:33
      'SELECT EMP_ID FROM EMP GROUP BY EMP_ID' 이 sql은 잘못된 겁니닷.. group by 는 해당 그룹별로 묶어...
    • 양길주
    • 2002.12.05 02:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신동묵
      2002.12.05 03:47
      C:Program FilesBorlandDelphi6DemosInternetchat 를 보시면 예제가 있습니다. 저두 첨에 이것을 보고 연...
    • 도니
    • 2002.12.05 01:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • DelChoBo
      2002.12.05 01:57
      관계된 테이블을 먼저 삭제후 필드를 삭제하거나 관계를 먼저 없앤 후 필드를 삭제하면 됩니다.
    • 백정민
    • 2002.12.05 00:41
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최은석
      2002.12.05 03:44
      outer join을 사용하세여.. select * from student s, reg r where s.st_num = r.st_num(+)
    • 김종균
      2002.12.05 01:06
      select * from student s, reg r where s.st_num = r.st_num and st_date is null ; 널 값을 찾으면...
    • 신동묵
    • 2002.12.05 00:29
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 델파이탐크루즈
      2002.12.05 00:40
      OS에 문제 있지 않을까여 ? 그리고 메모리상에도 문제가 있을듯... Win98 ~ WinXp까지.... 제가 알고...
    • 윤광희
      2002.12.05 20:30
      델파이로 PDA 프로그램을 만드는건 불가능합니다. 팜계열이나 Brew 계열 프로그램을 작성할때는 Intel C...
    • 신동묵
      2002.12.05 01:39
    • 최용일
      2002.12.05 01:03
      안녕하세요. 최용일입니다. 문자열쓸때 좀 잘못됬네요... 포인터를 넣으셨군요... Move(id[1],...
    • 이상로
    • 2002.12.04 23:38
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 백진욱
      2002.12.06 01:51
      Ado로 연결할 수 있습니다. mysql사이트로 가셔서 myodbc를 받아서 컴퓨터에 까시구요 odbc에서 dns를 ...
    • 샤리
    • 2002.12.04 23:33
    • 1 COMMENTS
    • /
    • 0 LIKES
    • DelChoBo
      2002.12.05 03:40
      쿼리는 이상 없고 스트링 그리드(SearchGrid)에 뿌려줄때 잘못된것 같네요. 12-16일자가 12-15일자 위에 ...
    • 도니
    • 2002.12.04 23:15
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박병영
      2002.12.04 23:20
      안녕하세요 ^^ 아래처럼 해보세여 SELECT 코드,이름 FROM    A 테이블 WHERE&...
    • 도니
      2002.12.04 23:28
      배워도 배워도 끝이 없는거 갔네요.>^^ 오늘도 새로운거 하나 배우고 갑니다.. 감사합니다..^^
    • 김영습
    • 2002.12.04 22:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김진호
      2002.12.04 23:34
      그냥 지나가다가 답면해 봅니다. 이런경우 Move이용 하시면 될듯 합니다. 아니면 레코드를 이룔 하는것...
    • 윤민규
    • 2002.12.04 21:31
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.05 01:12
      안녕하세요. 최용일입니다. 쉘에 트레이아이콘이 변했다고 아래와 같은식으로 통지하시면 됩니다. Sh...
    • 윤민규
      2002.12.05 19:43
      감사합니다. 성공했습니다.... Trayicon 컴포넌트와 팁에 올라온 자료와 조합해서 성공했습니다. 님...
    • 김민수
    • 2002.12.04 21:31
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.04 21:07
      안녕하세요. 최용일입니다. 형이 안맞아서 나는에러네요... 인터베이스컴포넌트(TIBQuery, TIBTable)...
    • 김태환
      2002.12.04 22:45
      미안합니다. 최용일님의 답변에 따라 표준 컴포넌트로 인터베이스 테이블을 읽으려 시도했으나 엔진에러...
    • 최용일
      2002.12.05 00:43
      안녕하세요. 최용일입니다. 그럴리가요... 2주전에도 그렇게 사용해본적이 있구 지금도 테스트해보니...
    • 비너스
    • 2002.12.04 19:27
    • 1 COMMENTS
    • /
    • 0 LIKES
    • FTT
      2002.12.13 21:20
      255.255.255.255가 로컬내의 모든 IP로 브로드 캐스팅할 수 있습니다. 저도 예전에 로컬용도로 제작한...
    • 임혜옥
    • 2002.12.04 19:02
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 전종표
      2002.12.05 02:17
      Delphi 메뉴에서 Prject->Option 선택하여 보면 아마도 퀵레포트폼이 Available Forms 에 있지 않나요?&...
    • 임혜옥
      2002.12.05 02:35
      관심 있는 답변 감사드립니다. 그런데 흠..제가 질문을 좀 엉성히 했던 거 같아서 다시 올립니다. MDI ...