我正在尝试使用Raspberry Pi和7英寸触摸屏来创建Assetto Corsa仪表板,在通用Windows平台上使用vb进行编码。
我遇到了很多这个平台的问题,因为对象与.net非常不同,我觉得微软的逻辑非常奇怪。
但是,我尝试解释这个问题:Assetto Corsa有自己的遥测,当用户启动会话开始向端口9996,UDP协议上的连接客户端发送一些数据。 实际上,游戏并不是那么简单,因为将客户端“绑定”到服务器上有一个“程序”,其中包括:
客户必须发送包含3个整数的结构化数据(“110”)
服务器响应向客户端发送包含
的一些数据
曲目名称,球员姓名和其他人
以下是握手协议的更准确说明:Assetto corsa UDP Telemetry documentation
由于这些是我第一次接触UPD通信,我肯定会正确理解它是如何工作的,所以我编写了这个python脚本:
from socket import *
from struct import *
serverName='127.0.0.1'
serverPort = 9996
clientSocket = socket(AF_INET,SOCK_DGRAM)
message=pack('iii',1,1,0)
clientSocket.sendto(message, (serverName, serverPort))
messageback, ipAddress=clientSocket.recvfrom(1024)
print 'received'
pktformat='408c'
n = calcsize(pktformat)
print n
#n = len(messageback)
#print n
backString = unpack(pktformat, messageback)
#print backString[1,2,3,4,5,6,7,8,9,10]
#print "fffffff"
message=pack('iii',1,1,1)
clientSocket.sendto(message, (serverName, serverPort))
i=0
while 1:
pktformat='4chfff??????fffhhhhfffffhf4f4f4f4f4f4f4f4f4f4f4f4f4f4fff5f'
messageback, ipAddress =clientSocket.recvfrom(16384)
n = calcsize(pktformat)
print n
n = len(messageback)
print n
backString = unpack(pktformat, messageback)
print backString
i+=1
clientSocket.close()
一切正常但Python GUI不太好看,所以我会转向VS + VB + UWP + WIN10IoT。
Dim s As String = "110"
Dim byteCommand As Byte() = Encoding.ASCII.GetBytes(s)
Dim writer As New DataWriter(listener.OutputStream)
writer.WriteBytes(byteCommand)
Try
Await listener.ConnectAsync(hostname, "9996")
Await writer.StoreAsync()
Catch ex As Exception
testo = ex.Message
refreshTb()
End Try
使用此代码,我可以从服务器接收第一个通信,因此我重复发送“111”的代码:
Private Async Sub HandShake(inStream As IBuffer)
If handShaked Then
Exit Sub
End If
handShaked = True
Dim writer As New DataWriter(listener.OutputStream)
Dim s As String = "111"
Dim byteCommand As Byte() = Encoding.ASCII.GetBytes(s)
writer.WriteBytes(byteCommand)
Await writer.StoreAsync()
testo = "hand-shaked!"
End Sub
在此之后,没有任何反应。
我试过了: 1.以字符串形式发送数据,而不是byte()。没有改变 2.发送“XXX”而不是“110”:我希望不会收到任何内容,但收到的内容与发送“110”时相同!!!
所以我开始认为我没有正确转换“110”所以我向服务器发送了一种无法理解的数据。
有什么想法吗?