|
안녕하세요?
TServerSocket, TClientSocket둘 모두 stNonBlocking으로 하구요.
TThread를 별도로 사용하지는 않았습니다.
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
UMessageBuffer messageBuffer; //구조체들의 공용체 512 Byte
Socket->ReceiveBuf((void*)(&messageBuffer),sizeof(UMessageBuffer));
1: Socket->SendBuf((void*)(&messageBuffer),sizeof(UMessageBuffer));
2: Socket->SendBuf((void*)(&messageBuffer),sizeof(UMessageBuffer));
}
이렇게 두 번을 같은 클라이언트에 거의 동시에 보내게 되면
클라이언트의 OnRead 이벤트는 두 번 모두 발생하는데
두 번째 보낸 것을 클라이언트에서 제대로 받질 못합니다.
한편, 2에서 Socket를 다른 클라이언트로 하면 두 클라이언트 모두 제대로 받더군요.
그리고 한 클라이언트에서
1: ClientSocket1->SendBuf((void*)(&messageBuffer),sizeof(UMessageBuffer));
2: ClientSocket1->SendBuf((void*)(&messageBuffer),sizeof(UMessageBuffer));
위와 같이 서버에 연속해서 두 번 보내면 서버는 둘 모두 제대로 받더군요.
서버에서 동일한 클라이언트에 동시에 두 번 메시지를 보낼 때 왜 클라이언트에서
두 번째 메시지를 제대로 받지 못하는지요?
그리고 어떻게 하면 이를 해결할 수 있을까요?
여러분의 도움을 구합니다.
감사합니다.
|