고수님들의 도움이 필요합니다.
질문의 요지는 다음과 같습니다.
질문1) Server Socket 에 접속한 Client를 보여주는방법과
Client Address를 알아서 Client가 보낸 메세지 처리결과를
해당 Client에만 전하는 방법을 알고 싶습니다.
----------- ---------- --------------
| | ---------------->|Middle |--------------->| |
|Client(N)| Send Msg |Server | Send Msg | Main Server|
| | <----------------| |<---------------| |
| | Send Msg | | Send Msg | |
----------- ---------- --------------
대략적인 시스템 개요 입니다.
여기서 Client가 여러개 접속하면 제가 알기로는 특정 Client에만
Msg를 보낼수 없다고 알고 있어
고수님들이 도움이 필요합니다.
초보자의 어려움을 해결해주세요
해당 client ip로만 메세지를 보낼수 있다면 좋으련만...델파이에서 제공하는 socket 으로는 안되는것 같더라구요.
그런데 해당 클라이언트socket으로 메세지를 보낼수는 있습니다.
serversocket1.Socket.Connections[index:integer].sendtext.....
위문장에서 connections[]안에 들어가는 순서가 서버로 접속한 클라이언트의 순서이거든요. 그러니까 서버에서 접속한 클라이언트의 접속ip등의 자료를 listbox등에 가지고 있으면 listbox의 itemindex와 안에 들어가는 index를 맞추면 되거든요.
단 listbox에 출력되는 자료는 해당 클라이언트가 종료될때에도 같이 삭제를 해주어야합니다. 좀 번거롭죠...
암튼...제 나름대로 해본방법이니까요. 그냥 흘려들으셔도 됩니다.
그렇게 해서 제가 서버로 여러클라이언트가 접속해서 클라이언트에서 해당 클라이언트로 메세지를 보내봤는데 잘 되었습니다.
그런데 문제는 여러클라이언트중에서 어느한 클라이언트가 비정상 종료가 되는경우였거든요. 그럼... 서버에서 이것이 종료가 되었는지 어쩐지를 판단을 못하더라구요.
그래서 서버에 있는 클라이언트 접속 항목이 틀어지기 시작하면서 메세지가 어먼데로 날아가고 심지어는 에러까장... ㅠ.ㅠ
아마 이곳 질문란에 socket 컴포넌트 사용시 클라이언트의 비정상 종료처리에 대한 질문이 여러번 나온걸로 알고 있는데요. 답변을 찾지는 못했습니다.
저두 답답해서 글을 남기는겁니다. 답변은 아니고요. 혹 해결책을 찾으시면 저두 알켜주십시요. 제 질문을 올려놓는것 같아서 죄송합니다. 그럼...
푸우 wrote:
> 고수님들의 도움이 필요합니다.
>
> 질문의 요지는 다음과 같습니다.
>
> 질문1) Server Socket 에 접속한 Client를 보여주는방법과
> Client Address를 알아서 Client가 보낸 메세지 처리결과를
> 해당 Client에만 전하는 방법을 알고 싶습니다.
>
> ----------- ---------- --------------
> | | ---------------->|Middle |--------------->| |
> |Client(N)| Send Msg |Server | Send Msg | Main Server|
> | | <----------------| |<---------------| |
> | | Send Msg | | Send Msg | |
> ----------- ---------- --------------
>
> 대략적인 시스템 개요 입니다.
> 여기서 Client가 여러개 접속하면 제가 알기로는 특정 Client에만
> Msg를 보낼수 없다고 알고 있어
> 고수님들이 도움이 필요합니다.
> 초보자의 어려움을 해결해주세요
>