코딩은 대충 다음과 같습니다. 이건 서버,클라이언트 두개가 존재하고 프로그램 2개를 띄우고
클라이언트에서 서버 아이피를 지정하여 채팅을 합니다. 서버와 클라이언트 1:1은 잘돼는데
클라이언트 2개 이상접속하게 하려합니다. 통신은 무뇌충입니다. 스레드 생성을 해야하는지 잘 모르겟네요
..그리고 서버타입을 stNonBlocking 인지, stThreadBlocking 인지 요?
좀 알려주세요.. 코딩에 추가 해서 설명 해주시면 고맙겟습니다. 말보다 코딩으로 보는게
쉽고 이해하기 좋아서요..부탁하빈다.
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var iValue : Integer;
begin
if key = #13 then begin
key := #0;
if IsClient then
iValue := ClientSocket1.Socket.SendText( edit1.Text + ' :' + memo1.Text)
else
iValue := ServerSocket1.Socket.Connections[0].SendText(edit1.Text + ' :' + memo1.Text);
memo2.Lines.add(edit1.Text + ' :' + memo1.Text);
memo1.Lines.clear;
memo1.SetFocus;
memo1.SelStart := 0;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ClientSocket1.Active := False;
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Button1.Enabled := True;
Button3.Enabled := False;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo2.Lines.Add(Socket.ReceiveText);
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo2.Lines.Add(Socket.ReceiveText);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
IsClient := False;
ServerSocket1.Active := True;
Button1.Enabled := False;
Button3.Enabled := False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
end.
코드를 짜드리는것은 무리이구요. 델파이 Demos폴더에 보시면 예제가 있습니다. 찾아보세요...
쓰레드나 서버타입과는 별 상관이 없구요... 일단 클라이언트와 서버간의 1:1 통신이 잘 된다면 나머지는 쉽습니다.
클라이언트끼리의 통신에서 서버는 중계만 해주시면 됩니다.
클라이언트1->서버->클라이언트2
각각의 부분을 떼어놓고 보면(클라이언트->서버, 서버->클라이언트) 님께서 하신 서버와 클라이언트의 1:1통신과 같습니다.
사용자구분은 파라매터로 들어오는 Socket을 이용하시면 됩니다.
^^ 항상 즐코하세요..