2009-07-06 6 views
1

code pour le serveur:Pourquoi ce code réseau filaire ne fonctionne-t-il pas? (Java)

http://stikked.com/view/64826511

Network Code pour le client:

http://stikked.com/view/38974838

Fondamentalement, le client se connecte au serveur, mais au-delà, cela ne fonctionne pas. Lorsqu'un message est envoyé, System.out.println du client indique que l'interface graphique appelle la fonction correcte. Mais il n'y a aucun signe que le serveur ait jamais reçu l'argent. Si je suis telnet dans le serveur, il fonctionne correctement.

Ceci est ma première tentative non assistée à la fois de code threadé et de réseau Java. Jusqu'à maintenant, la plupart de mes programmes étaient des applications Web ou des applications de bureau très simples (par exemple, Calculatrice). (Si votre réponse est "Vous faites tout faux", veuillez indiquer un tutoriel correct pour un programme client-serveur où le client et le serveur peuvent envoyer des messages à tout moment. Le client exécute quelques commandes codées en dur, puis quitte)

+0

La personne qui a voté en bas et a voté pour fermer, pourriez-vous expliquer pourquoi? (Je suppose que c'est la même personne) – Macha

+0

Comment est ce spam? Il utilise un pastebin au lieu de mettre le code ici sur SO, c'est tout. Cependant, le code * devrait * être posté ici afin qu'il "n'expire" pas comme il le ferait sur un pastebin. –

+0

+1 pour contrer le downvote. –

Répondre

3

Deux problèmes immédiats - vous utilisez un PrintWriter, ce qui signifie qu'il ne lancera aucune exception s'il ne peut pas réellement parler au serveur. Vous n'appelez pas non plus flush(), il se peut donc qu'il soit juste en train d'enregistrer les données.

je suggère:

  • Utilisation OutputStreamWriter au lieu de PrintWriter, et gérer les exceptions de manière appropriée. Cela supprimera également la mise en mémoire tampon. Vous pouvez souhaitez l'envelopper dans un BufferedWriter et puis appelez flush() après que vous avez terminé avec un message.
  • Spécifiez le jeu de caractères approprié, par ex. UTF-8.
+0

La modification de OutputStreamWriter et l'appel de flush() l'ont corrigé. Comment puis-je spécifier un jeu de caractères? – Macha

+0

Utilisez la surcharge pour le constructeur OutputStreamWriter qui prend un nom de jeu de caractères, par ex. "utf8". –

Questions connexes