Programming - cpueblo.com

소켓에 스트리밍 데이터 보내기


글쓴이 : 유광희 날짜 : 2002-08-16 (금) 10:47 조회 : 15983
작성 : 김정순

//---------------------------------------------------------------------------

void TSocket::SendPacket()
{
    /***************************************
        -> 패킷 전송
	// cSocket  : TCustomWinSocket (전역 변수)
	// nPktSize : 보낼 데이터 전체 크기(전역 변수)
	// pktData  : 보낼 데이터(전역 변수)
	// iCurrSize : 지금까지 보낸 누적 데이터 사이즈
    ****************************************/
    if(!cSocket->Connected){
        delete[] pktData;
        pktData = NULL;
        return;
    }

    int iSendSize, iCurrSize = 0;

    if (nPktSize < SENDSIZE )
        iSendSize = cSocket->SendBuf(pktData, nPktSize);
    else
        iSendSize = cSocket->SendBuf(pktData, SENDSIZE);

    iCurrSize = iSendSize;

    while(iCurrSize < nPktSize && cSocket->Connected){

        if( (nPktSize - iCurrSize) < SENDSIZE)
            iSendSize = cSocket->SendBuf(pktData + iCurrSize, nPktSize - iCurrSize);
        else
            iSendSize = cSocket->SendBuf(pktData + iCurrSize, SENDSIZE);

        if ( iSendSize > 0 )
            iCurrSize = iCurrSize + iSendSize;
    }

    delete[] pktData;
    pktData = NULL;

}
코딩 : 유광희. 간단 허접 버그 생길지 모르는 코드. 그래도 잘 된다. 혹시 모르는 예외 상황을 알아서 추가하도록..

bool TBRSPacket :: SendToClient(void *Buffer, int Size)
{
	int SendSize = Size;
	char *p = (char *)Buffer;

	while(1)
	{
		if (Socket->isConnected() == false)
			return false;

		int r = Socket->SendBuf(p, SendSize);

		if (r < <FONT COLOR=#FF00FF>0)
			continue;

		SendSize -= r;
		p += r;

		// 다 보냈다?
		if (SendSize <= <FONT COLOR=#FF00FF>0)
			break;
	}
}