2 votes

Réception et envoi de chaînes de caractères sur le réseau en QB64

Je travaille sur un mini jeu Pokemon pour mon frère qui fonctionne sur le réseau. Malheureusement, lors des tests, je me suis rendu compte que, pour une raison ou une autre, une erreur de type "Bad file name or number" (mauvais nom ou numéro de fichier) apparaissait uniquement sur les lignes où l'on tentait d'envoyer une chaîne de caractères à un autre ordinateur, alors qu'aucune erreur n'apparaissait lorsque la commande de réception était exécutée en boucle.

Voici mon code :

SCREEN 12
CLS
PRINT ""
PRINT ""
PRINT ""
PRINT ""
PRINT ""
PRINT "                       POKELITE - By Mark "
PRINT ""
PRINT ""
INPUT "Join or Host a game? ", hostorjoin$
hostorjoin$ = UCASE$(hostorjoin$)
IF hostorjoin$ = "JOIN" THEN GOTO JOIN
IF hostorjoin$ = "HOST" THEN GOTO HOST

HOST:
server& = _OPENHOST("TCP/IP:300")
PRINT "Waiting for connection..."
PRINT "! Remember: If playing locally, give the other player your IPv4 Address !"
DO
    HOST& = _OPENCONNECTION(server&)
LOOP UNTIL HOST& <> 0
PRINT ""
PRINT "2nd Player Joined!"
SLEEP 2
GOTO GAME
JOIN:
INPUT "Enter Server IPv4 Address (Example: 192.168.1.25): ", joinip$
handle& = _OPENCLIENT("TCP/IP:300:" + joinip$)
IF handle& = 0 THEN PRINT "Connection failed!": SLEEP 2: CLS: GOTO JOIN
GOTO GAME
GAME:
CLS
INPUT "Enter your name: ", name$
IF name$ = "" THEN GOTO GAME
PRINT "Waiting for other player..."
IF hostorjoin$ = "JOIN" THEN
    PUT HOST&, , name$
    DO
        GET handle&, , name2$
    LOOP UNTIL name2$ <> ""
END IF
IF hostorjoin$ = "HOST" THEN
    PUT handle&, , name$
    DO
        GET HOST&, , name2$
    LOOP UNTIL name2$ <> ""
END IF
PRINT name$
PRINT name2$

2voto

Vous devez vous assurer que le port est disponible, sinon server& sera un identifiant de serveur invalide. Le choix d'un port de 49152 ou plus est généralement sûr. . Mais ce n'est probablement pas votre seul problème.

Votre problème est probablement que votre variable de connexion n'est tout simplement pas la même, ce qui signifie que HOST& y handle& devrait juste être handle& . Il est important de se rappeler qu'il n'y a jamais de "handle hôte" et de "handle client" ; les seuls handles sont le "handle serveur" (créé à l'aide de la fonction _OPENHOST pour réserver essentiellement un port pour vos connexions) et le "handle de connexion" (créé à l'aide de la commande _OPENCONNECTION par le serveur pour se connecter à un client ou _OPENCLIENT par le client pour se connecter à un serveur). Cela permettra également de réduire votre logique à un simple PUT suivi d'un GET boucle. J'utilise le nom connection& au lieu de handle& mais vous voyez l'idée.

SCREEN 12
CLS
PRINT ""
PRINT ""
PRINT ""
PRINT ""
PRINT ""
PRINT "                       POKELITE - By Mark "
PRINT ""
PRINT ""
INPUT "Join or Host a game? ", hostorjoin$
hostorjoin$ = UCASE$(hostorjoin$)
IF hostorjoin$ = "JOIN" THEN GOTO JOIN
IF hostorjoin$ = "HOST" THEN GOTO HOST
' If neither "HOST" nor "JOIN" is specified, what happens?

HOST:
server& = _OPENHOST("TCP/IP:300")
PRINT "Waiting for connection..."
PRINT "! Remember: If playing locally, give the other player your IPv4 Address !"
DO
    connection& = _OPENCONNECTION(server&)
LOOP UNTIL connection& <> 0
PRINT ""
PRINT "2nd Player Joined!"
SLEEP 2
GOTO GAME
JOIN:
INPUT "Enter Server IPv4 Address (Example: 192.168.1.25): ", joinip$
connection& = _OPENCLIENT("TCP/IP:300:" + joinip$)
IF connection& = 0 THEN PRINT "Connection failed!": SLEEP 2: CLS: GOTO JOIN
GOTO GAME
GAME:
CLS
INPUT "Enter your name: ", playerName$
IF playerName$ = "" THEN GOTO GAME
PRINT "Waiting for other player..."

' Send name to opponent and wait for opponent's name.
PUT connection&, , playerName$
DO
    GET connection&, , opponentName$
LOOP UNTIL opponentName$ <> ""

PRINT "You:     "; playerName$
PRINT "Opponent:"; opponentName$

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X