使用 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 控件只向数组中的最后一个索引发送文本消息