![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| IP Networking Saiba o TCP / IP, Internet Protocol, Routing, Routers, protocolos de rede UNIX e Linux neste fórum. |
Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
|
||||
| Fio | Thread Starter | Fórum | Respostas | Última postagem |
| Problema com memória | kshk123 | HP-UX | 2 | 05-25-2009 08:01 |
| memória problema | Sonali | Alto Nível de programação | 5 | 05-25-2009 07:55 |
| Memória no pthread | mindTeaser | UNIX & avançada para usuários experientes | 4 | 05-18-2009 02:30 |
| Memória vazamento de garfo () | whererush | Alto Nível de programação | 7 | 05-11-2006 12:51 |
| sobre memória virtual e memória | shriashishpatil | Alto Nível de programação | 4 | 02-20-2006 11:31 |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
||||
|
memória?
Todas oi, meu cliente servidor de aplicação pode funcionar em dois modos: 1) uma direção - só cliente envia mensagens para o servidor 2) duas direções - servidor dá "respostas" ao cliente. quando executar o programa no primeiro modo, ela parece bem, mas quando servidor responde ao cliente do cliente do que sair do seu funcionamento após a aplicação de um curto tempo. Estou tentando encontrar o problema, mas têm algumas taugh tempo. esta é a função que lê os dados no lado do cliente (no qual tenho problemas): Código:
int TCPClient::readSocketData(int s,
char *decodeUnifiedMsgForServer,
int n,
bool& isMsg
)
{
int bcount; int br;
bcount = 0;
br = 0;
while (bcount < n)
{
if ((br = recv(s,decodeUnifiedMsgForServer,n-bcount,0)) > 0)
{
isMsg = true;
bcount += br; decodeUnifiedMsgForServer+= br;
}
else if (br < 0) /* signal an error to the caller */
{
return(-1);
}
else {
return bcount;
}
//Y 17_04_05 -
Sleep(0);
//Y.
}
return(bcount);
}
após tampão (decodeUnifiedMsgForServer) é preenchido pela função acima eu decodificar os dados para as classes de dados como se segue: Código:
void BrainControlComData::decodeMsg(char* decodeUnifiedMsgForServer)
{
if(strlen(decodeUnifiedMsgForServer) == 0)
{
char* error = "probably an error (see Q1 below)";
}
char* msg = decodeUnifiedMsgForServer;
int size = 4;
int lenCursorData;
int lenManipData;
int lenVzData;
//places 1 - 12 in msg are reserved for total size/ isEventMsg/ MsgID
int Web_lenOfClass;
// decode len of msg
memcpy(&Web_lenOfClass, msg, size);
int lenOfClass = ntohl(Web_lenOfClass);
int Web_MsgID;
// decode msg ID
memcpy(&Web_MsgID, msg + MSG_ID_LOCATION, size);
int msgID = ntohl(Web_MsgID);
//Y 6_07_05 -
int counter = 12;
int len = 0;
len = comData[CURSOR_DATA]->decodeMsg(msg + counter);
counter += len;
len = comData[STATE_DATA]->decodeMsg(msg);
}
os 3 primeiros bytes no buffer são inteiros (dados gerais, tais como: - total len, msgid etc) e eu descodificá-los na 2 ª função. depois que eu enviar o buffer em dados específicos de classes que decodificar os dados de que necessitam utilizar o fuction decodeMsg. minhas perguntas são as seguintes: 1) Porque é o tamanho do buffer (decodeUnifiedMsgForServer) é sempre 0 e não é igual ao comprimento da mensagem recebida do servidor? Sei que os dados são recebidos a partir do servidor porque ele é registrado corretamente, mas quando eu ainda verificar comprimento de msg que equas 0 (primeiro 'se' na segunda função) - quaisquer ideias? 2) quando eu notar a linha que chama o decodeMsg o aplicativo 'comportado' OK e cliente não sair do seu funcionamento. Penso que este erro tem algo a ver com a memória. Talvez se eu entendi a primeira pergunta que eu pudesse entender esta como um bem. Muito obrigado pela vossa ajuda, Lenna |
| Marcadores |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|