使用 vb6 winsock 发送 python 字符串

Posted

技术标签:

【中文标题】使用 vb6 winsock 发送 python 字符串【英文标题】:Send python string using vb6 winsock 【发布时间】:2021-02-21 08:17:20 【问题描述】:

我假设我不知道 python。这个脚本通过局域网发送一个简单的字符串到一个局域网地址(从我的电脑到python服务器)

-------------------------------------------------------
    import socket
#
host ="192.168.0.17"
port =49280
#
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
#
s.sendall("set MIXER:Current/InCh/Fader/On 1 0 1\n".encode())
s.recv(1500)
s.close
-----------------------------------------------

我想发送相同的字符串,但使用 vb6....

--------------------------------------------
    Private Sub Command3_Click()
Winsock1.RemoteHost = "192.168.0.17"
Winsock1.RemotePort = 49280
Winsock1.Protocol = sckTCPProtocol
Winsock1.Connect
winsock1

  Dim stringa1, stringa As String
  Dim Data() As Byte
  stringa = "set MIXER:Current/InCh/Fader/On 1 0 1\n"
  Data = StrConv(stringa, vbFromUnicode)
  
    Winsock1.SendData Data

End Sub
----------------------------------------------

但不幸的是它不起作用。 使用第一个脚本,我的远程 python 服务器正确响应,使用 vb6 中的脚本服务器没有生命迹象 谁能告诉我我犯了什么错误?感谢所有和良好的延续 马里奥

【问题讨论】:

VB6 不是脚本语言。如果要发送 ANSI 字符,可以跳过字节数组和显式转换,只需发送字符串数据。您没有代码等待和接受返回的响应数据。无论如何,变体stringa1 是什么?但是您的核心问题可能是愚蠢地使用 C 语法来尝试转义换行符。 嗨,Bob,“string1”只是原始脚本中包含的一个变量,具有与发送数据无关的其他用途。它仍然是书面的,但不需要为此目的。我已经尝试过先简单地发送字符串,但它不起作用...... 如果下面的答案解决了您的问题,请接受 - 请参阅What should I do when someone answers my question? 【参考方案1】:

根据这张表:

https://www.quackit.com/python/reference/python_3_escape_sequences.cfm

Python 中的\n 是换行符。所以在 VB6 中,这将是 vbLf

所以试着把你的行改成这样:

stringa = "set MIXER:Current/InCh/Fader/On 1 0 1" & vbLf

【讨论】:

我认为仍然需要 Byte() 转换,因为 Python 的 string.encode() 方法似乎是 convert a string to bytes,这就是 socket.send() 方法发送的内容:“要发送的数据以字节为单位。如果数据是字符串格式,可以调用str的encode()方法将其转换为字节。" 是的,StrConv 调用没有任何问题。实际上,我认为 winsock 控件可能会在内部完成,所以我敢打赌,不管有没有这个,它都可以工作。无论如何,接收消息的设备几乎肯定在寻找行尾,这就是原始代码无法正常工作的原因。 即使粗略阅读文档也会告诉您,发送字符串总是会调用到 ANSI 的转换。

以上是关于使用 vb6 winsock 发送 python 字符串的主要内容,如果未能解决你的问题,请参考以下文章

VB6:如何获取通过 winsock 发送的字节数?

vb6 - 将消息发送到winsock服务器聊天

VB6 中的 Winsock 控件只向数组中的最后一个索引发送文本消息

VB6 Winsock 能够发送非常大的有效载荷

VB6 应用程序通过 winsock 发送 UDP 广播消息 - 仅每秒发送一次消息

尝试使用 VB6 Winsock 连接到票务打印机