|
답변 감사드리구요 ^^
또 질문드릴께요.
답변해주신 님이 Indy Winshoes를 추천해주셨는데, 요 TServerClientThread를
일단 사용해보구 나서, Indy 를 써봐야겠어요. 당장은 급해서..그리고
TClientSocket도 막 썼는데, Indy싸이트 가서 보니깐 C++builder에서 제공하는
인터넷 콤포넌트하곤가? 암튼. 먼가 같이 사용할 수 없다고..
다시 질문드리는 건요,
제가 어떻게 했냐면요.
TServerSocket *ServerSocket;
//을 생성해놓구 ACtive시켰어요.
//OnGetThread 이벤트 핸들러에서
void __fastcall TCommand::ServerSocketGetThread(System::TObject* Sender, TServerClientWinSocket* ClientSocket, TServerClientThread* &SocketThread)
{
SocketThread = new TMyServerClientSOcket(false, ClientSocket, this);
}
쓰레드를 생성해주었구요.
void __fastcall TMyServerClientThread::ClientExecute(void)
{
while..
try..
//요기서 TWinSocketStream을 선언해서 수행할 코드를 써주었거든요.
//클라이언트로부터 데이터를 일부분 받아들여서 원하는 파일을 업로드.
}
그런데, 제가 파악한 바로는 클라이언트가 접속해올 때마다 OnGetThread이벤트가 발생해서,
그때 그때 새로운 쓰레드를 생성해서, 그 쓰레드가 클라이언트와의 작업을 ClientExecute함수
내에 코드대로 수행을 하는 거 같거든요? 근데, 한번 클라이언트가 접속해오면 OnGetThread
이벤트가 발생하고, 수행이 끝나면 쓰레드가 사라지고, 다시 클라이언트가 접속해오면
새로운 쓰레드 생성 즉 OnGetThread이벤트가 발생해얄 거 같은데, 생성시켜주는 데로 가지
않고, 바로 ClientExecute가 불리더라고요. 이궁..
제가 잘못 이해하고 있으면 좀 지적해주시면 감사하겠습니다 ^^
그리고 또 질문은 이벤트 핸들러의 매개변수에서 TServerClientThread* &SocketThread
에서 * & 요거 있잖아요. 참조자인가요? 참조자를 이해하는 거를 회피해서 --; 잘 모르는..
SocketThread를 생성해주면 이 주소를 TServerWinSocket가 관리하는 ActiveThread 리스트
같은 거에 추가가 되는 건가요?
p.s: 정리되지 않은 질문 죄송하고, 바로 답변해주셔서 감사합니다.
|