델파이 시작 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;
를 보시면 예제가 있습니다. 저두 첨에 이것을 보고 연습했습니다.
그럼 즐프하세요.