클라이언트 사용부분에 문제가있나요? 클라이언트 문제인지 서버문제인지;
먹통이되는 문제가 발생하는데 원인을 못찾겠네요ㅠ 클라이언트는 디스커넥트 이벤트도 발생을 안하고
타임아웃같은것도 사용안함으로 잘되있는거같은데...
많은 패킷이 중계되는 서버와 클라이언트 입니다.
조언좀 부탁드립니다ㅠ
클라이언트 설정은
ReuseSocket = rsFalse
UseNagle = False
TerminateWaitTime = 0
서버 설정은
ConnectTimeout = 0
IPVersion = Id_IPv4
Port = 0
ReadTimeout = -1
ReuseSocket = rsFalse
UseNagle = False
//클라이언트 쓰레드 Execute 처리부분
void __fastcall tcpClient::Execute()
{
while(Form1->IdTCPClient1->IOHandler->Connected()){
try{
int RecieveSize = Form1->IdTCPClient1->IOHandler->InputBuffer->Size;
if(RecieveSize > 0){
TIdBytes data;
Form1->IdTCPClient1->IOHandler->ReadBytes(data, RecieveSize, false);
Form1->serverSend(data);
}else{
Sleep(20);
}
}catch(...){
Form1->clientClose();
}
}
Form1->clientClose();
//---- Place thread code here ----
}
//서버 Execute 이벤트 처리부분
try{
if(AContext->Connection->IOHandler->Connected()){
int RecieveSize = AContext->Connection->IOHandler->InputBuffer->Size;
if(RecieveSize > 0){
TIdBytes array;
AContext->Connection->IOHandler->ReadBytes(array, RecieveSize, false);
for(int i = PacketIdx; i < RecieveSize; i++){
PacketD[i] = array[i];
}
PacketIdx += RecieveSize;
while (true) {
int length = PacketD[0] & 0xFF;
length |= PacketD[1] << 8 & 0xFF00;
if ((length == 0) || (length > PacketIdx)) break;
TIdBytes temp;
temp.set_length(length);
for(int i = 0; i < length; i++){
temp[i] = PacketD[i];
}
PacketIdx -= length;
for(int i = 0; i < PacketIdx; i++){
PacketD[i] = PacketD[(length + i)];
}
clientSend(temp);
}
}else{
Sleep(20);
}
}else{
Sleep(20);
}
}catch(...){
}
|