그렇지 않아도 ServerSocket은 문제가 있다는 이야기를 주변에서 들었습니다.
그런제 제가 Indy를 사용해 보지 않았거든요.
제가 올려드린 소스를 Indy로 고치려면 어디를 어떻게 수정해야 하나요?
실은 제가 소켓에대해 전혀 모르는데 억지로 짜고 있거든요.^^
kylix 님이 쓰신 글 :
: 델파이 기본소켓은 기본적으로 비동기방식이어서 Active=true한다고 해서 바로 접속되지 않습니다.
: OnConnect이벤트에서 접속을 체크한 뒤에 데이터를 보내거나, Indy와 같은 동기식 소켓으로 바꾸세요.
:
: 김수정 님이 쓰신 글 :
: : 델파이 2010를 사용하구요.
: : ServerSocket과 ClientSocket으로 소켓프로그램을 하다가 데이터전송을 두번씩 해야 서버에 데이터가 표시됩니다.
: : 아주 간단하게 샘플프로그램으르 만들어 봤더니 역시 마찬가지입니다.
: :
: :
: :
: : 서버측 소스코드입니다.
: : =================================================================================
: : procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
: : begin
: : ServerSocket1.Active := false;
: : end;
: :
: : procedure TForm1.FormCreate(Sender: TObject);
: : begin
: : ServerSocket1.Port := 23;
: : ServerSocket1.Active := True;
: : end;
: :
: : procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
: : begin
: : Memo1.Lines.Add(Socket.RemoteAddress + ' sends :') ;
: : Memo1.Lines.Add(Socket.ReceiveText);
: : end;
: : =================================================================================
: :
: :
: :
: : 다음은 클라이언트측 소스코드입니다.
: : =================================================================================
: : procedure TForm1.Button1Click(Sender: TObject);
: : begin
: : ClientSocket1.Port := 23;
: : ClientSocket1.Host := Edit1.Text;
: : ClientSocket1.Active := true;
: :
: : ClientSocket1.Socket.SendText(Edit2.Text);
: :
: : ClientSocket1.Active := false;
: :
: : end;
: : =================================================================================
: :
: :
: : 이렇게 했는데 Button1을 두번 클릭해야 서버의 Memo1에 표시가 됩니다.
: :
: :
: : 클라이언트에서
: : 폼을 오픈할때 미리 ClientSocket1.Active := true; 를 해두면 한번 클릭해도 잘되는걸 보니
: : ClientSocket1.Active := true;
: : 하고 나서 바로
: : ClientSocket1.Socket.SendText(Edit2.Text);
: : 를 해주니 문제가 되는것 같은데요.
: :
: : 수시로 여러 피시로 데이터를 보내야 하기 때문에 이렇게 밖에 할 수 없거든요.
: :
: :
: : 어디를 수정해야 하나요?
|