Du kanske ska pröva att skicka en byte-array istället.
Dim data(9) As Byte
data(0) = 255
data(1) = 255
data(2) = 255
data(3) = 255
data(4) = Asc("p")
data(5) = Asc("i")
data(6) = Asc("n")
data(7) = Asc("g")
data(8) = 0
Winsock.SendData data
8 svar · 325 visningar · startad av Gein
Läste denna tråd: http://www.webforum.nu/showthread.php?s=&postid=97473#post97473
och tänkte försöka göra samma sak fast via Visual Basic istället. Alltså att skicka data till en Counter-strike-server för att få tillbaka information. Jag använder Winsock-kontrollen och har satt Localport till något valfritt, t.ex 27016, RemoteHost är satt till adressen till servern 192.168.0.101 (den står inom lokala nätverket) och remoteport till 27015 som är default för cs-servern.
Sen är det UDP-protokoll som gäller.
På denna sida (http://www.lammhult.com/sample/uploader/uploads/server protocol.txt) står det:
Messages are sent to the server by sending 4 consecutive bytes of 255 (32-bit integer -1) and then the string command followed by a zero byte to terminate it
Men jag förstår inte riktigt hur strängen ska se ut. Jag får nämligen aldrig något svar från servern. Har provat diverse:
Winsock.SendData "FFFFFFFFping00"
Winsock.SendData "255" & "255" & "255" & "255" & "ping" & "0"
Winsock.SendData "ÿÿÿÿping0"
Inget verkar funka, för jag får inget svar. Någon som vet nånting om detta?
Du kanske ska pröva att skicka en byte-array istället.
Dim data(9) As Byte
data(0) = 255
data(1) = 255
data(2) = 255
data(3) = 255
data(4) = Asc("p")
data(5) = Asc("i")
data(6) = Asc("n")
data(7) = Asc("g")
data(8) = 0
Winsock.SendData data
Ah, tackar! Jag ska prova det omgående!
Ja!, Det funkar! Det är underbart.. jag som försökte hela kvällen igår.. Man får bocka och buga å det ödmjukaste! ;)
Ännu en fråga:
Det är så att jag inte riktigt får det svaret jag förväntar mej.
Om vi säger att jag skickar strängen för att få info om Rules.
Då står det såhär i textfilen jag postade högre upp:
"rules"
Server responds with the following packet:
(int32) -1
(byte) ASCII 'E' (rules response, S2A_RULES)
(int16) number of rulesfor each rule
(string) rule name
(string) rule value
Den sträng som jag får som svar från servern är: "ÿÿÿÿE@"
Det är ju ingenting i princip. Om jag kollar i bytesTotal, variabeln som följer med i DataArrival så säger den 1070, vilket är betydligt mycke mer än "ÿÿÿÿE@".
Vart gömmer sej resterande bytes? Och hur får jag tag i dom?
Hmm, om jag kör Len(strGet) på den sträng som jag får, så säger den att den är 1070 lång. Men när jag skriver ut den så får jag fortfarande bara den där lilla strängen.. ?
edit: det verkar som om det ligger i någon array av något slag.
Om jag leker lite med Mid(strGet,,) så får jag fram lite värden till slut, om jag t.ex kör Mid(strGet, 41, 8) så får jag ut Pausable
sen spelar det ingen roll om jag ökar 8:a till t.ex 50, jag får fortfarande bara ut Pauseable
men om jag istället skriver mid(strGet, 49,1) så får jag ut en 1:a
alltså att Pauseable är satt till 1, men varför är det så svårt att få ut det?
(hmm, tror jag pratar med mej själv i den här tråden :))
Jag löste det iaf, och nån kanske har nytta av det i framtiden så jag skriver det.
Det var så att det fanns massa chr(0) tecken i strängen som fick VB att tro att den var slut, jag bytte ut alla chr(0) mot ett & tecken istället, och nu ser jag hela strängen
Det var så att det fanns massa chr(0) tecken i strängen som fick VB att tro att den var slut, jag bytte ut alla chr(0) mot ett & tecken istället, och nu ser jag hela strängen
Du ska nog inte läsa det där som en enda lång sträng. Se det som binära data som innehåller en massa små strängar. Försök få in det till någon array av bytes. Nu var det regler i textform du fick. Men i en del andra fall kommer du få siffror som är av intresse, och de kommer i binär form, tex:
"players"
Server responds with the following packet:
(int32) -1
(byte) ASCII 'D' (players response, S2A_PLAYER)
(byte) active client countfor each active client
(byte) client number / index
(string) player name
(int32) client's frag total
(float32) client's total time in-game
där sakerna i fetstil kommer vara oläsbara i textform, men fullt förståeliga i sina respektive dataformat.
Jo, jag märkte det, när jag skrev ut players så blev alla kills konstiga tecken. Får väl göra en chr() antar jag.. det där löser sej :)