|
허접한 제가 알기론 Thread Blocking방식에서는
TWinSocketStream* pStream = NULL;
pStream = new TWinSocketStream(ClientSocket,200);
pStream->Read(&Buffer,BUF_SIZE);
...
delete pStream;
으로 데이터를 읽고 쓰는 것으로 알고 있네요...
물론 try{}__fianlly{}를 사용하구요..
그리고, non blocking일 경우..
SendBuf를 사용하실때...
현재 연결된 Socket의 SendBuf를 사용하시는게 아닌가 싶군요..
즉,
Form1->ServerSocket1->Socket->SendBuf(rspBuf, 9);와 같이 서버소켓에 쏘는게 아니고,
Socket->SendBuf(rspBuf,9);
식으로 클라이언트 소켓에 사용하는게 아닌가 싶군요..
물론 틀릴수도 있죠 *^^*
허접이었습니다..
처버빌더 님이 쓰신 글 :
: client / server 프로그래밍에서
: server는 client가 접속하면 스레드를 생성해서 처리해 주는
: 스레드 블럭킹 모드를 사용했습니다.
:
: Form1에 올라가 있는 서버 소켓의 Get Thread 이벤트 함수에서
: SocketThread = new TServerSocketThread(false, ClientSocket);
: 이렇게 해서 서버 소켓으로 들어온 클라이언트를 처리하기 위한 스레드를 생성하고
:
: 스레드가 실행 되면서 수행하는 내용은 아래와 같이 정의 했는데
: void __fastcall TServerSocketThread::ClientExecute(void)
: {
: nTransfered = ClientSocket->ReceiveBuf(Buffer, sizeof(Buffer));
: //이런식으로 클라이언트에서 온 데이타를 받고
:
: Form1->ServerSocket1->Socket->SendBuf(rspBuf, 9);
: //ack를 위와 같은 형식으로 보내는데
: }
:
: 클라이언트에서 보내는 데이타는 받는데
: 서버에서 클라이언트로 ack는 보내지지 않습니다.(뻗어버립니다.)
: 이유를 모르겠습니다.
: 아시는 분은 가르쳐 주셨으면 좋겠네요.
: 그럼 이만.. 꾸벅.
:
|