代码之家  ›  专栏  ›  技术社区  ›  Mark

在QB64中通过网络接收和发送字符串

  •  2
  • Mark  · 技术社区  · 7 年前

    不幸的是,在测试时,我发现出于某种原因,它只在试图将字符串发送到另一台计算机的行上出现关于“错误文件名或编号”的错误,但在循环接收命令时没有错误。

    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$
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   user539810 user539810    7 年前

    您需要确保端口可用,否则 server& Choosing a port of 49152 or higher is generally safe 然而,这可能不是你唯一的问题。

    您的问题可能是您的连接变量根本不一样,这意味着 HOST& handle& 应该只是 把手(&A); 。重要的是要记住,从来没有“主机句柄”和“客户端句柄”;唯一的句柄是“服务器句柄”(使用 _OPENHOST 基本上为您的连接保留一个端口)和“连接句柄”(使用 _OPENCONNECTION _OPENCLIENT PUT ,后跟一个 GET connection& 而不是 把手(&A);

    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$