Скачивание Странички Из Интернета И Вывод Информации В Чате, Api1 желательно |
Здравствуйте, гость ( Вход | Регистрация )
Скачивание Странички Из Интернета И Вывод Информации В Чате, Api1 желательно |
12.3.2009, 15:42
Сообщение
#41
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Если мне не изменяет память, то "\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00".chr(10) - это строка в php. Если это строка, то в сокет поступает строка, даже в тобою приведённом примере.
Нас не волнует в каком виде она передаётся сокетом, нас интересует в каком виде она поступает в сокет, и в каком виде извлекается из сокета! |
|
|
12.3.2009, 15:43
Сообщение
#42
|
|
Активный участник Группа: Пользователи Сообщений: 80 Регистрация: 25.2.2009 Пользователь №: 2 359 Спасибо сказали: 6 раз |
фактически серверу приходит сообщение (тут 4 символа FF)TSource Engine Query(Тут 1 символ 00)
что еще мне надо ответить ...я незнаю Код Request format
Server info can be requested by sending the following byte values in a UDP packet to the server. FF FF FF FF 54 53 6F 75 72 63 65 20 45 6E 67 69 яяяяTSource Engi 6E 65 20 51 75 65 72 79 00 ne Query i.e. -1 (int), 'T' (byte), "Source Engine Query" (string) |
|
|
12.3.2009, 15:53
Сообщение
#43
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ещё раз повторяю, что как высокоуровнего программиста тебя не интересует, что там происходит на низком уровне. Тебя интересует только то как данные отсылаются и получаются на высоком уровне. А на высоком уровне они отсылаются строкой, и извлекаются из сокета тоже в виде строки. А уже строку тебе самому решать в какой тип преобразовать.
|
|
|
12.3.2009, 15:57
Сообщение
#44
|
|
Активный участник Группа: Пользователи Сообщений: 80 Регистрация: 25.2.2009 Пользователь №: 2 359 Спасибо сказали: 6 раз |
Ещё раз повторяю, что как высокоуровнего программиста тебя не интересует, что там происходит на низком уровне. Тебя интересует только то как данные отсылаются и получаются на высоком уровне. А на высоком уровне они отсылаются строкой, и извлекаются из сокета тоже в виде строки. А уже строку тебе самому решать в какой тип преобразовать. У меня нет доступа к движку Соурс(никто мне никогда не даст его исходников) так что мне надо через луа какимто макаром отправить такую строку и если она отправится то я получу что-нибудь типа Код Example reply: FF FF FF FF 49 02 67 61 6D 65 32 78 73 2E 63 6F яяяяI.game2xs.co 6D 20 43 6F 75 6E 74 65 72 2D 53 74 72 69 6B 65 m Counter-Strike 20 53 6F 75 72 63 65 20 23 31 00 64 65 5F 64 75 Source #1.de_du 73 74 00 63 73 74 72 69 6B 65 00 43 6F 75 6E 74 st.cstrike.Count 65 72 2D 53 74 72 69 6B 65 3A 20 53 6F 75 72 63 er-Strike: Sourc 65 00 F0 00 05 10 04 64 6C 00 00 31 2E 30 2E 30 e......dl..1.0.0 2E 32 32 00 .22. или вы мне хотите сказать что луа неподдерживает в строке вместо символа писать код символа? даже в паскале в строку можно пихать коды символа... |
|
|
12.3.2009, 16:09
Сообщение
#45
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Преобазование шестнадцатеричных символов в строку
Код local str = 0xFF..0xFF..0xFF..0xFF..0x54..0x53..0x6F..0x75..0x72..0x63..0x65..0x20..0x45..0x6E..0x67..0x69..0x6E ..0x65..0x20..0x51..0x75..0x65..0x72..0x79..0x00 Преобразование кодов символов в строку символов Код local c = string.char
local str = c(0xFF)..c(0xFF)..c(0xFF)..c(0xFF)..c(0x54)..c(0x53)..c(0x6F)..c(0x75).. c(0x72)..c(0x63)..c(0x65)..c(0x20)..c(0x45)..c(0x6E)..c(0x67)..c(0x69)..c(0x6E).. c(0x65)..c(0x20)..c(0x51)..c(0x75)..c(0x65)..c(0x72)..c(0x79)..c(0x00) |
|
|
12.3.2009, 16:28
Сообщение
#46
|
|
Активный участник Группа: Пользователи Сообщений: 80 Регистрация: 25.2.2009 Пользователь №: 2 359 Спасибо сказали: 6 раз |
Цитата Преобразование кодов символов в строку символов Код local c = string.char local str = c(0xFF)..c(0xFF)..c(0xFF)..c(0xFF)..c(0x54)..c(0x53)..c(0x6F)..c(0x75).. c(0x72)..c(0x63)..c(0x65)..c(0x20)..c(0x45)..c(0x6E)..c(0x67)..c(0x69)..c(0x6E).. c(0x65)..c(0x20)..c(0x51)..c(0x75)..c(0x65)..c(0x72)..c(0x79)..c(0x00) такс вот это работает но, 1) после выполнения скрипт получает сообщение и публикует его не полностью или получает неполностью я так и непонял 2)какбы из полученной строки от сервера откинуть нечитабельные символы типа 00? (вернее преобразовать их во что-нибудь читабельное) Вот набросал код, спрашивай, если что непонятно, надеюсь немного в луа мы смыслим CODE local sDatagram = " FF FF FF FF 54 53 6F 75 72 63 65 20 45 6E 67 69 6E 65 20 51 75 65 72 79 00 " -- отсылаемые данные local sServerIp = "127.0.0.1" -- айпи local sServerPort = 1209 -- порт local iTimeOut = 1/100 -- таймаут соединения на получение local iBuferSize = nil -- размер буфера (nil - стандартный) ---------------------------------------------------------------------------- -- loads the socket module local socket = require("socket") local myudp = socket.udp() myudp:settimeout(iTimeOut) myudp:setpeername(sServerIp, sServerPort) local _, sError = myudp:send(sDatagram, sServerIp, sServerPort) if sError then -- ошибка! end -- уже точно не помню какие функции в старом апи, так что поправьте если накосячил! function Main() SetTimer(1000) StartTimer() end function OnStartup() TmrMan.AddTimer(1000, "OnTimer") end function OnTimer() local sData, sError = ReceiveData() if not sError then -- мы получили какие-то данные sData и тут уже их обрабатываем end end function OnExit() myudp:close() end OnError = OnExit function ReceiveData() local sData, sError = myudp:receive(iBuferSize) if sError then -- ошибка! return nil, sError end return sData end вот ваш скрипт каждую iTimeOut стучится к серверу....а мне надо 1 раз чтоб ввел что-нибудь в чате и он постучал к серверу |
|
|
12.3.2009, 16:35
Сообщение
#47
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
А руками нельзя что ли отбросить (просто не писать)?
Код local c = string.char local str = c(0xFF)..c(0xFF)..c(0xFF)..c(0xFF)..c(0x54)..c(0x53)..c(0x6F)..c(0x75).. c(0x72)..c(0x63)..c(0x65)..c(0x20)..c(0x45)..c(0x6E)..c(0x67)..c(0x69)..c(0x6E).. c(0x65)..c(0x20)..c(0x51)..c(0x75)..c(0x65)..c(0x72)..c(0x79) Скрипт не стучится к серверу, он находится в состоянии готовности получить с сервера какие-либо данные. |
|
|
12.3.2009, 16:40
Сообщение
#48
|
|
Активный участник Группа: Пользователи Сообщений: 80 Регистрация: 25.2.2009 Пользователь №: 2 359 Спасибо сказали: 6 раз |
А руками нельзя что ли отбросить (просто не писать)? Код local c = string.char local str = c(0xFF)..c(0xFF)..c(0xFF)..c(0xFF)..c(0x54)..c(0x53)..c(0x6F)..c(0x75).. c(0x72)..c(0x63)..c(0x65)..c(0x20)..c(0x45)..c(0x6E)..c(0x67)..c(0x69)..c(0x6E).. c(0x65)..c(0x20)..c(0x51)..c(0x75)..c(0x65)..c(0x72)..c(0x79) Скрипт не стучится к серверу, он находится в состоянии готовности получить с сервера какие-либо данные. 1)нет понимаете прикол такой(я включаю скрипт и он каждую секунду отправляет запрос серверу и каждую секунду то получает ответ то таймайт)(и все это сопровождается жесточайшими лагами птохи) 2)откинуть 00 мне надо не в запросе к серверу а в ответе а то если напрмер в ответе идут сначала читабельные символы(обычные анг-буквы) а потом идет символ 00 и после него опять англ буквы,то последние англ буквы в чате не показываются,которые идут после символа с кодом 00 |
|
|
12.3.2009, 16:52
Сообщение
#49
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Как он может отправлять данные каждую секунду, если функция отправки не находится в таймере.
Код local _, sError = myudp:send(sDatagram, sServerIp, sServerPort) Данные отправляются 1 раз при старте скрипта. В таймере находится функция получения данных. Насчёт символов, наверное можно сделать так: Код str = str:gsub("["..string.char(0x00).."]", "") А в каком виде приходит сообщение скрипту с сервера? |
|
|
12.3.2009, 16:54
Сообщение
#50
|
|
Активный участник Группа: Пользователи Сообщений: 80 Регистрация: 25.2.2009 Пользователь №: 2 359 Спасибо сказали: 6 раз |
Как он может отправлять данные каждую секунду, если функция отправки не находится в таймере. как бы точнее он и в правда 1 раз посылает...он их получить пытается через каждую секунду...а надо получил и все заглохнуть Цитата Насчёт символов, наверное можно сделать так: Код str = str:gsub("["..string.char(0x00).."]", "") [23:53] Синтакс ...J_\PtokaX.0.3.5.2.LUA.5.1.1.RUS.by.NRJ\scripts\1.lua:51: attempt to index local 'sData' (a nil value) Цитата А в каком виде приходит сообщение скрипту с сервера? вот в таком виде (все первые буквы до символа с кодом 00 норм выводятся) Код Example reply:
FF FF FF FF 49 02 67 61 6D 65 32 78 73 2E 63 6F яяяяI.game2xs.co 6D 20 43 6F 75 6E 74 65 72 2D 53 74 72 69 6B 65 m Counter-Strike 20 53 6F 75 72 63 65 20 23 31 00 64 65 5F 64 75 Source #1.de_du 73 74 00 63 73 74 72 69 6B 65 00 43 6F 75 6E 74 st.cstrike.Count 65 72 2D 53 74 72 69 6B 65 3A 20 53 6F 75 72 63 er-Strike: Sourc 65 00 F0 00 05 10 04 64 6C 00 00 31 2E 30 2E 30 e......dl..1.0.0 2E 32 32 00 .22. |
|
|
12.3.2009, 17:00
Сообщение
#51
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ну и каким образом ты выводишь часть сообщения в чат? Я что-то не могу понять.
|
|
|
12.3.2009, 17:02
Сообщение
#52
|
|
Активный участник Группа: Пользователи Сообщений: 80 Регистрация: 25.2.2009 Пользователь №: 2 359 Спасибо сказали: 6 раз |
|
|
|
12.3.2009, 17:04
Сообщение
#53
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Код local sDatagram = " FF FF FF FF 54 53 6F 75 72 63 65 20 45 6E 67 69 6E 65 20 51 75 65 72 79 00 " -- отсылаемые данные
local sServerIp = "127.0.0.1" -- айпи local sServerPort = 1209 -- порт local iTimeOut = 1/100 -- таймаут соединения на получение local iBuferSize = nil -- размер буфера (nil - стандартный) ---------------------------------------------------------------------------- -- loads the socket module local socket = require("socket") local myudp = socket.udp() myudp:settimeout(iTimeOut) myudp:setpeername(sServerIp, sServerPort) -- уже точно не помню какие функции в старом апи, так что поправьте если накосячил! function Main() SetTimer(1000) end function OnTimer() local sData, sError = ReceiveData() if not sError and sData then -- мы получили какие-то данные sData и тут уже их обрабатываем StopTimer() SendToAll(tostring(sData)) end end function ChatArrival(tUser, sData) local sCmd = sData:match"%b<> !send" if sCmd then StartTimer() local _, sError = myudp:send(sDatagram, sServerIp, sServerPort) if sError then -- ошибка! end end end function OnExit() myudp:close() end OnError = OnExit function ReceiveData() local sData, sError = myudp:receive(iBuferSize) if sError then -- ошибка! return nil, sError end return sData end |
|
|
12.3.2009, 17:06
Сообщение
#54
|
|
Активный участник Группа: Пользователи Сообщений: 80 Регистрация: 25.2.2009 Пользователь №: 2 359 Спасибо сказали: 6 раз |
ну вот примерно так да
вот что я вижу в чате при работе скрипта Цитата [00:09:33] яяяяTSource Engine Query
[00:09:35] яяяяI&Left 4 Dead server (versus by IIPu3PAK and John710) [00:09:37] nil [00:09:37] timeout [00:09:37] nil [00:09:37] timeout [00:09:39] nil [00:09:39] timeout [00:09:39] nil [00:09:39] timeout |
|
|
12.3.2009, 17:11
Сообщение
#55
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Я подправил.
На команду в чат !send должны отправиться данные на сервер, после получения данных прослушка останавливается, пока в чат опять не будет отослана данная команда. |
|
|
12.3.2009, 17:13
Сообщение
#56
|
|
Активный участник Группа: Пользователи Сообщений: 80 Регистрация: 25.2.2009 Пользователь №: 2 359 Спасибо сказали: 6 раз |
Я подправил. На команду в чат !send должны отправиться данные на сервер, после получения данных прослушка останавливается, пока в чат опять не будет отослана данная команда. все с вашим скриптом все замечательно :smile2: но вот как убить из получаемого сообщения коды 00 а то он после 00 невыводит(точнее не убить а всетаки заменить на * например или любой другой символ) |
|
|
12.3.2009, 17:21
Сообщение
#57
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Надо проверять, действительно ли вся строка приходит от сервера скрипту:
Код function OnTimer()
local sData, sError = ReceiveData() if not sError and sData then -- мы получили какие-то данные sData и тут уже их обрабатываем StopTimer() SendToAll("Length of data = "..sData:len()) SendToAll(tostring(sData)) end end |
|
|
12.3.2009, 17:24
Сообщение
#58
|
|
Активный участник Группа: Пользователи Сообщений: 80 Регистрация: 25.2.2009 Пользователь №: 2 359 Спасибо сказали: 6 раз |
Надо проверять, действительно ли вся строка приходит от сервера скрипту: Код function OnTimer() local sData, sError = ReceiveData() if not sError and sData then -- мы получили какие-то данные sData и тут уже их обрабатываем StopTimer() SendToAll("Length of data = "..sData:len()) SendToAll(tostring(sData)) end end Цитата [00:24:04 | 172.16.153.15] <IIPu3PAK> !send
[00:24:05] Length of data = 152 [00:24:05] яяяяI&Left 4 Dead server (versus by IIPu3PAK and John710) |
|
|
12.3.2009, 17:35
Сообщение
#59
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Код function print(...)
local m='' for i=1,select('#',...) do m=m..tostring(select(i,...))..", " end Core.SendToAll(m) end function OnTimer() local sData, sError = ReceiveData() if not sError and sData then -- мы получили какие-то данные sData и тут уже их обрабатываем StopTimer() SendToAll("Length of data = "..sData:len()) print(string.byte(sData, 1, sData:len())) SendToAll(tostring(sData)) end end |
|
|
12.3.2009, 17:40
Сообщение
#60
|
|
Активный участник Группа: Пользователи Сообщений: 80 Регистрация: 25.2.2009 Пользователь №: 2 359 Спасибо сказали: 6 раз |
Код 00000000:ff ff ff ff 49 26 4c 65 66 74 20 34 20 44 65 61 яяяяI&Left 4 Dea 00000010:64 20 73 65 72 76 65 72 20 28 76 65 72 73 75 73 d server (versus 00000020:20 62 79 20 49 49 50 75 33 50 41 4b 20 61 6e 64 by IIPu3PAK and 00000030:20 4a 6f 68 6e 37 31 30 29 00 6c 34 64 5f 76 73 John710).l4d_vs 00000040:5f 68 6f 73 70 69 74 61 6c 30 34 5f 69 6e 74 65 _hospital04_inte 00000050:72 69 6f 72 00 6c 65 66 74 34 64 65 61 64 00 4c rior.left4dead.L 00000060:34 44 20 2d 20 56 65 72 73 75 73 20 2d 20 4e 6f 4D - Versus - No 00000070:72 6d 61 6c 00 01 00 00 08 00 64 77 00 00 31 2e rmal......dw..1. 00000080:30 2e 30 2e 39 00 a0 87 69 65 6d 70 74 79 2c 61 0.0.9. ‡iempty,a 00000090:6c 6c 74 61 6c 6b 2c 00 ff ff ff ff 49 26 4c 65 lltalk,.яяяяI&Le 000000a0:66 74 20 34 20 44 65 61 64 20 73 65 72 76 65 72 ft 4 Dead server 000000b0:20 28 76 65 72 73 75 73 20 62 79 20 49 49 50 75 (versus by IIPu 000000c0:33 50 41 4b 20 61 6e 64 20 4a 6f 68 6e 37 31 30 3PAK and John710 000000d0:29 00 6c 34 64 5f 76 73 5f 68 6f 73 70 69 74 61 ).l4d_vs_hospita 000000e0:6c 30 34 5f 69 6e 74 65 72 69 6f 72 00 6c 65 66 l04_interior.lef 000000f0:74 34 64 65 61 64 00 4c 34 44 20 2d 20 56 65 72 t4dead.L4D - Ver 00000100:73 75 73 20 2d 20 4e 6f 72 6d 61 6c 00 01 00 00 sus - Normal.... 00000110:08 00 64 77 00 00 31 2e 30 2e 30 2e 39 00 a0 87 ..dw..1.0.0.9. ‡ 00000120:69 65 6d 70 74 79 2c 61 6c 6c 74 61 6c 6b 2c 00 iempty,alltalk,. вот так выглядит полный ответ от моего сервера |
|
|
Похожие темы
|
Сейчас: 23.11.2024, 13:50 |