Modem GSM WaveCom como um cliente TCP
Pergunta
Eu tenho tentado fazer comunicação TCP usando meu modem WaveCom Fastrack. O que eu quero alcançar é fazer com que o modem se conecte a uma porta do servidor TCP especificada para me permitir transferir dados de e para o servidor. Eu encontrei algumas informações sobre do que em o guia do usuário. Com base nas informações que você pode encontrar na página 66, criei um aplicativo que abre a porta serial à qual o modem está conectado e escreve os seguintes comandos AT:
AT+WIPCFG=1 //start IP stack
AT+WIPBR=1,6 //open GPRS bearer
AT+WIPBR=2,6,11,"APN" //set APN of GPRS bearer
AT+WIPBR=2,6,0 //username
AT+WIPBR=2,6,1 //password
AT+WIPBR=4,6,0 //start GPRS bearer
AT+WIPCREATE=2,1,"server_ip_address",server_port //create a TCP client on port "server_port"
AT+WIPDATA=2,1,1 //switch do data exchange mode
É exatamente isso que diz o guia do usuário. Depois que o último comando é enviado ao modem, o dispositivo muda para o modo de troca de dados e, a partir de tudo, tudo o que é escrito na porta serial aberto pelo meu aplicativo deve ser recebido pelo servidor e tudo o que o servidor envia deve aparecer no buffer de entrada daquela porta.
O fato é que eu não consegui manter uma comunicação bidirecional estável entre o servidor e meu modem. Quando escrevo alguns dados para a porta serial (apenas alguns bytes), leva muito tempo até que os dados apareçam no lado do servidor e, em muitos casos, os dados não atinjam o servidor.
Realizei alguns testes escrevendo cerca de 100 bytes na porta serial de uma só vez. Registrando os dados recebidos pelo meu aplicativo de servidor, notei que a primeira peça de dados (8-35 bytes) é recebida após um segundo ou dois. O restante dos dados aparece em 2-5 segundos (como um todo ou em pedaços do tamanho referido) ou não aparece.
Não sei onde procurar o motivo desse comportamento. Eu usei comandos AT errados para alternar o modem para o modo de cliente TCP? Não acredito que a comunicação pode ser tão lenta e instável.
Qualquer conselho será apreciado. Agradeço antecipadamente.
Solução
Qual sistema operacional você está executando? O Windows faz um bom trabalho ao esconder os detalhes confusos da comunicação com o modem GPRS, tudo o que você precisa fazer é criar uma nova conexão dial-up. Para estabelecer a conexão, você pode fazer uma chamada para a função rasdial Win32. Depois de conectado, você pode usar soquetes padrão para transferir dados em uma porta TCP.
Outras dicas
Eu uso o modem WaveComm há 2 anos. Como eu sei pela minha experiência é que, se você puder enviar alguns dos dados, poderá enviar todos os dados.
O problema pode estar no aplicativo de escuta que recebe os dados no lado do servidor. Pode ser que não consiga lidar com a quantidade de dados que você está tentando enviar.
Tente enviar os mesmos dados em bustos menores com algum atraso entre eles, então você pode receber todos os dados intactos.