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
[9537] Re:[질문] Indy (인디) 에서 가변 데이터 보내는 방법을 알려주세요..
civilian [civilian] 1524 읽음    2004-05-28 13:27
라이크유 님이 쓰신 글 :
: 인디로 간단한 메신저를 만들고 있습니다.
:
: 클라이언트에서 서버에 접속을 하면 서버의 Connect 이벤트에서  접속한 클라
: 이언트의 사용자명과 IP 를 하나의 TStringList에 추가 시킵니다.
:
: 이렇게 계속 클라이언트가 접속을 하였다가 접속을 끊게 되면 TStringList 에 Add, Delete 가 되는데 문제는 이 TStringList 를 클라이언트에 보내는것이 문제입니다. 가변길이라 어떻게 보내야 할지 모르겠습니다!!
:
: 또 클라이언트에서 받을때는 어떻게 처리해 주어야 하는건가요?
: 이것때문에 이틀을 삽질 해봤지만... 실패하였습니다.
:
: 제발 좀 알려주세요
:
: rocedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);  // 접속시
: var
:   List : TList;       // AThread(접속자) 를 저장하기 위한 리스트
:   Loop : Integer;     // 클라이언트 모두에게 메시지 전송을 위한 루프문 변수
:   IdpeerThread : TIdPeerThread;  // 접속자를 보다 간단히 표시 하기 위해
:   testPacket : string;
:
: begin
:
:   userList:=TStringList.Create;   // 접속시 사용자명 리스트 생성
:   AThread.Connection.ReadBuffer(PacketInfo,BufferSize); // 버터를 읽어라
:   PacketInfo.userIP := AThread.Connection.Socket.Binding.PeerIP; // 읽은 버퍼에 접속클라이언트 IP를 저장
:   userList.Add(PacketInfo.userName+','+PacketInfo.userIP); // 접속된 사용자명과 IP 를 리스트에 저장
:   userList.Sort;
:   List := IdTCPServer1.Threads.LockList;  // 모든 클라이언트에게 전달하기 위해 접속된 클라이언를 리스트로 만든다.
:   try
:     for Loop := 0 to List.Count-1 do Begin
:       IdpeerThread := TIdPeerThread(List.Items[Loop]); // 한개의 클라이언트를 보기 쉽게..
:       try
:         testPacket:='yoonhome';
:         dpeerThread.Connection.WriteBuffer(userList,sizeof(TStringList));
          //이렇게 쓰면 전송이 안되는군요.. 가변길이라 그런것 같은데.. 어떻게 바꿔 줘야 할까요?
          //==> 위와 같이 쓰면 TStringList의 포인터를 보내는 것이 됩니다.
          //==> UserList에 담겨있는 내용을 보내려면 아래와 같이 해보세요.
          //==> .WriteBuffer(userList.Text, Length(UserList.Text));

:       except
:         IdpeerThread.Stop;
:       end;
:     end;
:
:   Finally
:       IdTCPServer1.Threads.UnlockList; // 변동을 못하게 햇던 리스트를 풀어 줌
:   end;
: end;
:
: 제가 엄청 초보인만큼 쉽게 설명 부탁드려요 ㅜㅜ

+ -

관련 글 리스트
9534 [질문] Indy (인디) 에서 가변 데이터 보내는 방법을 알려주세요.. 라이크유 1146 2004/05/28
9537     Re:[질문] Indy (인디) 에서 가변 데이터 보내는 방법을 알려주세요.. civilian 1524 2004/05/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.