|
// 단순히 문자만 주고 받을때는 이렇게 해도 잘 돌아갔습니다
void __fastcall TMESSENGER_SERVER::SendAll( _PACKET *tempPacket )
{
CXOverlapped *pSendPacket = new CXOverlapped;
// 둘다 char형 배열입니다
strcpy( pSendPacket->szRecv, tempPacket->cNameMsg );
pSendPacket->mode = WRITE;
pSendPacket->iNum = 0;
for( int i = 0; i < g_nClients; i++ )
{
int len = strlen( pSendPacket->szRecv );
pSendPacket->szRecv[len+1] = '\0';
if( INVALID_SOCKET == g_asockClients[i] )
continue;
// char형 배열을 전송하고
if( FALSE == WriteFile( (HANDLE)g_asockClients[i],
pSendPacket->szRecv,
len,
NULL,
pSendPacket ) )
{
if( GetLastError() != ERROR_IO_PENDING )
{
MESSENGER_SERVER->ListBox1->Items->Add("WSARecv() failed with error");
return;
}
}
pSendPacket->iNum++;
}
}
unsigned int __stdcall RecvMsg(void *arg)
{
SOCKET sock = (SOCKET)arg;
char nameMessage[NAMESIZE + BUFSIZE];
int strLen;
while ( 1 )
{
// char형으로 받았을때는 잘나옵니다
strLen = recv( sock, nameMessage, NAMESIZE + BUFSIZE - 1, 0 );
if (strLen == -1 )
return 1;
nameMessage[strLen] = '\0';
AppMain->WriteStatusMsgDlg(nameMessage);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////서버에서 클라이언트로 패킷 클래스를 보내서 iMessageFlag, cNameMsg값을 출력하면 이상한 값이 나오네요
void __fastcall TMESSENGER_SERVER::SendAll( _PACKET *tempPacket )
{
CXOverlapped *pSendPacket = new CXOverlapped;
// 값이 제대로 나오는지 보기위해 클라이언트로 전송하기전에
// 서버에서 한번 찍어봤음. 값은 제대로 나옵니다
MESSENGER_SERVER->ListBox1->Items->Add( tempPacket->iMessageFlag );
MESSENGER_SERVER->ListBox1->Items->Add( tempPacket->cNameMsg );
pSendPacket->mode = WRITE;
pSendPacket->iNum = 0;
for( int i = 0; i < g_nClients; i++ )
{
if( INVALID_SOCKET == g_asockClients[i] )
continue;
// 패킷으로 보내고
if( FALSE == WriteFile( (HANDLE)g_asockClients[i],
(char *)&tempPacket,
sizeof( (char *)&tempPacket ),
NULL,
pSendPacket ) )
{
if( GetLastError() != ERROR_IO_PENDING )
{
MESSENGER_SERVER->ListBox1->Items->Add("WSARecv() failed with error");
return;
}
}
pSendPacket->iNum++;
}
}
unsigned int __stdcall RecvMsg(void *arg)
{
SOCKET sock = (SOCKET)arg;
char nameMessage[MY_COMMUICATION_BUFFER];
int strLen;
while ( 1 )
{
// 문자열로 받아서
strLen = recv( sock, nameMessage, MY_COMMUICATION_BUFFER, 0 );
if (strLen == -1 )
return 1;
// 값을 패킷 클래스에 넣고
_PACKET *MyPacket = (_PACKET *)nameMessage;
// 값이 제대로 나오는지 확인하려고 다 찍어봤음...
AppMain->WriteStatusMsgDlg( nameMessage );
AppMain->WriteStatusMsgDlg( MyPacket->cNameMsg );
AppMain->WriteStatusMsgDlg( MyPacket->iMessageFlag );
}
}
|