UDP와 TCP/IP 소켓을 이용하여 문자열 전송 프로그램을 개발중입니다. 애초에는 문자열 전송을 TCP/IP 소켓을 이용할려고 했으나 여러가지 문제로 인하여, 접속되어 있는 사람에게는 무조건 UDP를 이용하여 강제로 문자열을 보내고 있습니다.
그런데 UDP에는 Connection에 대한 사용자 정보가 없어, TCP/IP를 이용하여 최초 접속시 일정량의 자료를 보내주고 그 이후엔 실시간의 자료를 보내게 구현하였습니다.
그런데 접속은 잘되나, 클라이언트에서 Socket의 Close시 Stack Over Flow 에러가 납니다. 폼의 Close Event에 Sokcet.Close란 문장에서 Blocking을 걸어 체크 해 본 결과 그 문장만 실행하면 2-3분 지난후 Stack Over Flow란 에러 메세지를 냅니다.
그리고 서버측에서도 때아닌(?) 에러가 나구요.
이런 문제가 발생하는 이유가 무언지 알고 싶습니다. 제가 이용하는 소켓 컴퍼넌트는 델파이의 기본 컴퍼넌트입니다. 그리고 하나 더 질문할 것은 Indy를 이용시에 어떤 식으로 구현이 가능한지도 알고 싶습니다.
먼저 각 소켓에서 수신되는 데이타를 잘 옮겨 주고 있는지
소켓은 버퍼를 가지고 있고 수신된 데이타가 여기 쌓입니다. 이것을 다른 변수에
옮겨 주지 않으면 그 버퍼는 나중에 터지고(?) 소켓 에러를 내게 되죠
또, 계속적으로 송수신을 하는 소켓 프로그램에서 블록킹을 걸어서 디버깅하는 건 별로 좋은 방법이 아닙니다. 블록킹이 걸리는 동안에도 데이타가 날라오고 수신되는데 처리는 안 해주니까 버퍼가 터지게 됩니다..
그리고 Server Socket에서 체크 하실 건 이미 연결이 끊어진 Client에다가 데이타를 쏴주려고 하지는 않는지 체크 하세요...
구현회 wrote:
> UDP와 TCP/IP 소켓을 이용하여 문자열 전송 프로그램을 개발중입니다. 애초에는 문자열 전송을 TCP/IP 소켓을 이용할려고 했으나 여러가지 문제로 인하여, 접속되어 있는 사람에게는 무조건 UDP를 이용하여 강제로 문자열을 보내고 있습니다.
> 그런데 UDP에는 Connection에 대한 사용자 정보가 없어, TCP/IP를 이용하여 최초 접속시 일정량의 자료를 보내주고 그 이후엔 실시간의 자료를 보내게 구현하였습니다.
> 그런데 접속은 잘되나, 클라이언트에서 Socket의 Close시 Stack Over Flow 에러가 납니다. 폼의 Close Event에 Sokcet.Close란 문장에서 Blocking을 걸어 체크 해 본 결과 그 문장만 실행하면 2-3분 지난후 Stack Over Flow란 에러 메세지를 냅니다.
> 그리고 서버측에서도 때아닌(?) 에러가 나구요.
> 이런 문제가 발생하는 이유가 무언지 알고 싶습니다. 제가 이용하는 소켓 컴퍼넌트는 델파이의 기본 컴퍼넌트입니다. 그리고 하나 더 질문할 것은 Indy를 이용시에 어떤 식으로 구현이 가능한지도 알고 싶습니다.
>