2013-03-26 4 views
1

기본 인디 (Indy) TCP 서버와 클라이언트가 서버로 메시지를 보내는 클라이언트가 있습니다. 서버의 OnConnect 이벤트에서 클라이언트 IP가 목록 상자에 추가됩니다. 클라이언트가 연결 및 연결을 끊을 때 목록 상자를 업데이트하여 클라이언트의 목록 상자를 얻고 싶습니다. 나는 Indy 구성 요소를 처음 사용하고 있으며이를 수행하는 가장 좋은 방법은 무엇인지 확신 할 수 없습니까?Delphi Indy LAN Chat

+0

[인디를 사용한 채팅 예제] (http://www.devarticles.com/c/a/Delphi-Kylix/Creating-Chat-Application-with-Borland-DelphiIndy-The-Client/) [이것은 매우 간단하게] (https://www.google.com.ua/search?client=opera&q=indy+chat+example&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest) – Abelisto

+2

UDP 방송을 사용하십시오. – OnTheFly

+3

@ user539484 그것은 "문제를 해결하려면 "와 같은 메시지를 게시하는 것은 정말 멋진 전통입니다. :) 어떤 식 으로든 비꼬는 것은 아니지만 "배움"대신 "복사하여 붙여 넣기"와 같은 대답을하지 않을 때는 좋은 습관입니다. BTW UDP 프로토콜에는 하나의 큰 문제가 있습니다. 패킷이 다른 클라이언트에 도달했다고 가정하지 않습니다. 그래서 그것은 HTTP, FTP (또는 다른 더 안전한 프로토콜)에 의해 실현되어야합니다 내 이전 의견에서 두 번째 링크는 어떻게 이것을 설명합니다. – Abelisto

답변

1

TCP 소켓은 양방향으로 작동합니다. TCP 서버는 클라이언트가 서버에 연결하는 데 사용한 것과 동일한 소켓에서 클라이언트로 데이터를 전송할 수 있습니다.

활성 연결 목록을 클라이언트에 푸시하려면 IdTCPServer은 모든 연결을 반복하고 Connection.IOHandler.WriteXXX 메서드를 사용하여 정보를 보냅니다. 연결 목록 데이터를 브로드 캐스팅하는 것과 모든 클라이언트에 새로운 채팅 메시지를 브로드 캐스트하는 것 사이에는 기술적 인 차이가 없습니다.

유일한 요구 사항은 데이터에 메시지 본문 길이 및 데이터가 선택적으로 뒤에 오는 메시지 유형을 나타내는 "메시지 유형 표시기"(하나 이상의 헤더 바이트)가 필요하다는 것입니다.