2011-02-28 4 views
1

Je construis une application de serveur client à partir d'un appareil Android vers un serveur sur 3G. En raison de l'opérateur réseau qui fournit la 3G, le périphérique client est derrière un NAT. Par conséquent, il est impossible pour le serveur d'établir une connexion avec le client. Je pourrais adopter une approche de sondage, mais avant de le faire, je veux épuiser toutes les autres options. Y at-il un moyen (je n'en ai pas encore trouvé) de maintenir une connexion TCP Socket ouverte entre le client et le serveur, de sorte que le serveur puisse initier des communications avec le client?Connexion TCP/serveur TCP/IP persistante

Le scénario est qu'il y aura une communication client/serveur très régulière basée sur l'état du serveur qui se met à jour de façon extrêmement régulière - nous parlerions toutes les deux ou trois secondes. UDP serait-il une meilleure option ici? Peut-être pas comme le problème du NAT le frappe encore sur la tête.

Y a-t-il d'autres options disponibles?

Un grand merci

+1

Vous demandez comment le garder ouvert (pour une fenêtre de quelques secondes) - Je me demande comment il se referme sur vous en premier lieu. – corsiKa

+0

Ce n'est pas. Cependant, si j'utilise un objet ObjectOutputStream pour écrire un objet sur le serveur, puis-je le réutiliser plus tard, alors que le socket est toujours ouvert? Ou ai-je besoin de ré-instancier l'ObjectOutputStream? Je n'arrive pas à trouver quelque chose à ce sujet. Merci – Joeblackdev

Répondre

4

NAT ne signifie pas que le serveur ne peut pas envoyer quoi que ce soit. Il suffit d'ouvrir une connexion depuis le client et de laisser le serveur envoyer les événements qu'il enregistre. Vous pouvez également inclure un protocole de pulsation simple pour que le client et le serveur enregistrent une connexion rompue et pour informer le NAT que la connexion est toujours utilisée.

+0

Salut à tous. Merci pour la réponse. Le serveur peut envoyer des informations, mais seulement en réponse à un ObjectOutputStream.writeObject (...) du client. Il ne peut pas établir une connexion au client en raison du problème de NAT. – Joeblackdev

2

Il suffit d'ouvrir une socket et de l'utiliser, y compris ObjectOutputStream. Si les systèmes intermédiaires abandonnent la connexion, vous obtiendrez une exception, après quoi vous fermez et répétez.

Questions connexes