Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[13921] Re:Re:Re:Re:ServerSocket과 ClientSocket으로 소켓프로그램을 만드는데 도와주세요.
김수정 [] 2789 읽음    2011-11-15 14:00
참 많은 것을 생각해야 하네요.
간단할 줄 알았는데....^^

도움 감사합니다.


Lyn 님이 쓰신 글 :
: 문제가 있는게 아니라 논블럭 소켓의 당연한 특징입니다.
:
: Connect를 호출 해도 블락되지 않기 때문에, 나중에 Connect이벤트가 발생하기 전까진 연결 된게 아닙니다.
:
: 김수정 님이 쓰신 글 :
: : 그렇지 않아도 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);
: : : : 를 해주니 문제가 되는것 같은데요.
: : : :
: : : : 수시로 여러 피시로 데이터를 보내야 하기 때문에 이렇게 밖에 할 수 없거든요.
: : : :
: : : :
: : : : 어디를 수정해야 하나요?

+ -

관련 글 리스트
13916 ServerSocket과 ClientSocket으로 소켓프로그램을 만드는데 도와주세요. 김수정 1805 2011/11/14
13917     Re:ServerSocket과 ClientSocket으로 소켓프로그램을 만드는데 도와주세요. kylix 3288 2011/11/14
13918         Re:Re:ServerSocket과 ClientSocket으로 소켓프로그램을 만드는데 도와주세요. 김수정 2376 2011/11/15
13919             Re:Re:Re:ServerSocket과 ClientSocket으로 소켓프로그램을 만드는데 도와주세요. Lyn 2246 2011/11/15
13921                 Re:Re:Re:Re:ServerSocket과 ClientSocket으로 소켓프로그램을 만드는데 도와주세요. 김수정 2789 2011/11/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.