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

Networking 在QB64中通过网络接收和发送字符串,networking,tcp-ip,qbasic,Networking,Tcp Ip,Qbasic,我正在为我弟弟开发一款迷你口袋妖怪游戏,它可以通过网络工作。 不幸的是,在测试时,我发现出于某种原因,它只在试图向另一台计算机发送字符串的行上给出了一个关于“错误文件名或编号”的错误,但在循环接收命令时没有错误 这是我的密码: SCREEN 12 CLS PRINT "" PRINT "" PRINT "" PRINT "" PRINT "" PRINT " POKELITE - By Mark " PRINT "" PRINT "" INPUT "J

我正在为我弟弟开发一款迷你口袋妖怪游戏,它可以通过网络工作。 不幸的是,在测试时,我发现出于某种原因,它只在试图向另一台计算机发送字符串的行上给出了一个关于“错误文件名或编号”的错误,但在循环接收命令时没有错误

这是我的密码:

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$
屏幕12
CLS
打印“”
打印“”
打印“”
打印“”
打印“”
打印“POKELITE-按标记”
打印“”
打印“”
输入“加入或主持游戏?”,hostorjoin$
hostorjoin$=UCASE$(hostorjoin$)
如果hostorjoin$=“JOIN”,则转到JOIN
如果hostorjoin$=“主机”,则转到主机
主持人:
服务器&=\u OPENHOST(“TCP/IP:300”)
打印“正在等待连接…”
打印“!请记住:如果在本地播放,请向其他播放机提供您的IPv4地址!”
做
主机&=\u开放连接(服务器&)
循环到主机(&0)
打印“”
打印“第二名玩家加入!”
睡眠2
转到游戏
加入:
输入“输入服务器IPv4地址(示例:192.168.1.25):”,joinip$
handle&=\u OPENCLIENT(“TCP/IP:300:+joinip$)
如果句柄&=0,则打印“连接失败!”:睡眠2:CLS:GOTO JOIN
转到游戏
游戏:
CLS
输入“输入您的姓名:”,姓名$
如果name$=“”则转到游戏
打印“等待其他玩家…”
如果hostorjoin$=“JOIN”,则
放置主机名&$
做
获取句柄&,name2$
循环到name2$“”
如果结束
如果hostorjoin$=“主机”,则
放置句柄&,名称$
做
获取主机名&,name2$
循环到name2$“”
如果结束
印刷品名称$
打印名称2$

您需要确保端口可用,否则
服务器&
将是无效的服务器句柄。然而,这可能不是你唯一的问题

您的问题可能是您的连接变量根本不同,这意味着
HOST&
handle&
应该是
handle&
。重要的是要记住,从来没有“主机句柄”和“客户端句柄”;唯一的句柄是“服务器句柄”(使用
\u OPENHOST
创建,基本上为您的连接保留一个端口)和“连接句柄”(使用
\u OPENCONNECTION
创建,由服务器连接到客户端,或由客户端连接到服务器)。这也将减少只执行
PUT
,然后执行
GET
循环的逻辑。我使用的名称是
连接&
而不是
句柄&
,但你明白了

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$
屏幕12
CLS
打印“”
打印“”
打印“”
打印“”
打印“”
打印“POKELITE-按标记”
打印“”
打印“”
输入“加入或主持游戏?”,hostorjoin$
hostorjoin$=UCASE$(hostorjoin$)
如果hostorjoin$=“JOIN”,则转到JOIN
如果hostorjoin$=“主机”,则转到主机
'如果既不指定“主机”也不指定“连接”,会发生什么情况?
主持人:
服务器&=\u OPENHOST(“TCP/IP:300”)
打印“正在等待连接…”
打印“!请记住:如果在本地播放,请向其他播放机提供您的IPv4地址!”
做
连接&=\u OPENCONNECTION(服务器&)
循环直到连接&0
打印“”
打印“第二名玩家加入!”
睡眠2
转到游戏
加入:
输入“输入服务器IPv4地址(示例:192.168.1.25):”,joinip$
连接&=\u OPENCLIENT(“TCP/IP:300:+joinip$)
如果连接&=0,则打印“连接失败!”:睡眠2:CLS:GOTO JOIN
转到游戏
游戏:
CLS
输入“输入您的姓名:”,playerName$
如果playerName$=“”则转到游戏
打印“等待其他玩家…”
'将名字发送给对手并等待对手的名字。
放置连接&,playerName$
做
获取连接&,对方名称$
循环直到对方名称$“”
打印“你:”;玩家名称$
打印“对手:”;对方名称$