Linguagem C - Dicas e ajuda para iniciantes
|
30-08-2011, 19:02
Mensagem: #51
|
|||
|
|||
RE: Linguagem C - Dicas e ajuda para iniciantes
recvfrom é a função de leitura do socket...
o meu problema é que o programa fica lá parado à espera de dados nessa função. Se os dados não vierem o programa fica bloqueado. O que eu queria saber era como fazer um polling à função recvfrom e por exemplo a um temporizador, isto é, leio o relogio do sistema, depois solicito dados e por fim à espera dos dados mas em simultaneo vou lendo novamente o relogio do sistema para saber se já passaram 10 segundos (que indicam que o cliente nã0 esta ok) ajuda? |
|||
30-08-2011, 20:49
Mensagem: #52
|
|||
|
|||
RE: Linguagem C - Dicas e ajuda para iniciantes
(30-08-2011 19:02)jagsilva Escreveu: recvfrom é a função de leitura do socket... Veja se isto ajuda! Ou então vê este link onde tem lá referido que existe a opção de erro SOCTIMEDOUT e ainda tem lá esta consideração (Programming considerations): Citar:The receive timeout value (the SO_RCVTIMEO setsockopt option) determines how long to wait for data to be received before the recvfrom function times out.Consulte a página, tem lá muita informação! wolfytuga Para o que der e vier... emachines E520 | Intel Celeron 2.0GHz | 32/64bit | RAM 2GB | HD 160GB | Intel Mobile 4 Express, 64MB → 1GB |
|||
30-08-2011, 21:34
Mensagem: #53
|
|||
|
|||
RE: Linguagem C - Dicas e ajuda para iniciantes
hummm. Não é simples...
O primeiro link não resolveu. já o segundo provavelmente será uma opcção mas terei de procurar um exemplo para a utilização se souberem de algo mais pf digam |
|||
30-08-2011, 22:48
Mensagem: #54
|
|||
|
|||
RE: Linguagem C - Dicas e ajuda para iniciantes
Ser notificado pelo kernel quando alguma operação de I/O está disponível é
aquilo a que se chama I/O Multiplexing. Normalmente e para este caso mais simples é uma questão de usar as syscalls select(2) ou poll(2). Ambas têm um paramêtro em que se pode passar um timeout. Noutros, usam-se as funções kqueue(2), epoll(2), etc. Embora dependam do sistema. Em caso de portabilidade libevent ou libev. O guia sobre network programming do beej é do melhor que se pode encontrar na Internet. Para algo mais sério, o Unix Network Programming (aka UNP) do W. Richard Stevens. Sobre performance esta página também é uma boa leitura. HTH. |
|||
01-09-2011, 14:45
Mensagem: #55
|
|||
|
|||
RE: Linguagem C - Dicas e ajuda para iniciantes
Obrigado pelas dicas...
Já conhecia o beej e realmente é um bom apoio. Para quem usa win pode ver aqui a solução para o meu problema. Mais uma vez obrigado |
|||
03-09-2011, 14:40
Mensagem: #56
|
|||
|
|||
RE: Linguagem C - Dicas e ajuda para iniciantes
Tenho ainda mais uma questão provavelmente basica:
Quando crio um socket (UPD) não posso usar esse mesmo socket para enviar e receber dados? Eu tenho um programa com duas funções: uma cria um socket envia dados e fecha o socket e a segunda abre um socket para receber dados (a resposta). Tentei juntar as duas e tenho um erro no bind: inicializo o socket e envio dados, depois faço bind e fico à espera da respsota. no bind dá erro... obrigado |
|||
09-09-2011, 19:14
(Esta mensagem foi modificada pela última vez a: 09-09-2011 19:29 por helder fortunato.)
Mensagem: #57
|
|||
|
|||
RE: Linguagem C - Dicas e ajuda para iniciantes
boas wolfytuga ainda nao esperimentei como puseste aqui no forum,mas eu fiz de outra maneira parecido e está a funcionar como eu pretendia,isto é um programa que eu penssei construir em 4 fazes e esta era a terceira,bem vou por ai como eu fiz que tambem funciona depois dá uma opinião!!!
float resultado; resultado=soma; if ((resultado < 201)) printf("recebes 100 euros\n"); if ((resultado <= 250)&&(resultado >=200)) printf("recebes 250 euros\n"); if ((resultado <= 300)&&(resultado >=250)) printf("recebes 400 euros\n"); if (( resultado <= 350)&&(resultado >=300)) printf("recebes 550 euros\n"); if (( resultado <= 400)&&(resultado >=350)) printf("recebes 700 euros\n"); if ((resultado <= 450)&&(resultado >=400)) printf("recebes 850 euros\n"); if (( resultado <= 500)&&(resultado >=450)) printf("recebes 1000 euros\n"); eu fiz assim porque sobre este resultado que ira dar denpendente da pontuaçao atingida quero fazer uma soma e outra operaçao de percentagens descontar 23% bem isto foi na tentativa e erro rsrs |
|||
« Mais Antigo | Mais Recente »
|
Utilizadores a ver este tópico: 6 Visitante(s)