Уведомления

Группа в Telegram: @pythonsu

#1 Март 5, 2016 09:34:57

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка данных через сокет

Нужно отправить запрос на удаленный сервер. Получение ответа пока не требуется, нужно понять как кодировать данные для отправки. Проблем с сомой отправкой нет. Я не как не могу понять как преобразовать сами данные, перед их отправкой. Если не сложно привести простой пример как это сделать на python3. Или может есть хорошая статья по этой теме.


Конечно есть готовые либы. Есть python-valve. Судя по всему это очень качественная либа. Но написана изначально на 2 версии языка. Вроде как должна работать на 3 версии, но то и дело то там, то там ошибка. И не работает с некоторыми с серверами.



—-
memento mori

Офлайн

#2 Март 5, 2016 10:05:44

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Отправка данных через сокет

А стандартный модуль struct не помогает?



Офлайн

#3 Март 5, 2016 14:41:26

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка данных через сокет

Да, этот модуль используется в python-valve. Там просто жуткое количество encode… И разобраться в них не получается ->.



—-
memento mori

Офлайн

#4 Март 5, 2016 17:20:56

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Отправка данных через сокет

k0st1an
И разобраться в них не получается
Ну я не знаю. Там реального кода строчек 30. Думаю меньше не получится с любым другим модулем. Если вы в этом не можете разобраться то вам остается только заказать другим эту работу.



Офлайн

#5 Март 5, 2016 21:31:15

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка данных через сокет

Не, не могу заказывать. Нужно самому… Всегда получалось и тут получится. )))



—-
memento mori

Офлайн

#6 Март 5, 2016 21:37:13

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Отправка данных через сокет

k0st1an
но то и дело то там, то там ошибка
k0st1an
Нужно самому…
Тогда
1. Запишите ошибки которые вам мешают. (Сообщения об ошибках публикуйте тут)
2. свяжитесь с авторами библиотеки. Не исключено что они помогут.
3. Возможно что-то поправите сами, или с нашей помощью.



Офлайн

#7 Март 5, 2016 22:05:21

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка данных через сокет

Я думал об этом. Но я сейчас работаю над одним проектом и терять время на этом не хочется. Пока я буду пользоваться своим костылем. Вот это кусок работает, получает данные. Теперь надо их в словарь раскидать
(мне то надо всего три значения выдернуть):

#!/usr/bin/env python3
import socket
import struct
import select
host = ('a.b.c.d', 27015)
host2 = ('localhost', 8888)
BUFF = 1400
A2S_INFO = 0x54
A2S_PAYLOAD = 'Source Engine Query'
BytesField = '<B'
StringField = '<s'
LongField = '<l'
header = struct.pack(LongField, -1)
request_type = struct.pack(BytesField, A2S_INFO)
payload = A2S_PAYLOAD.encode(encoding='utf-8')
packet = b''.join([header, request_type, payload, b'\x00'])
print('header', header)
print('request_type:', request_type)
print('payload:', payload)
print('packet:', packet)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(packet, host)
r = select.select([s], [], [], 4)
print(r[0][0].recv(BUFF))

Мой код конечно просто ужасен. Но сетевым программированием не занимался, даже тут мало что понимаю (например про header, это видимо стандартно, так как в документации ничего про это нет, но в чужом коде это увидел и применил). Когда основная часть проекта будет завершена, я смогу уделить больше времени либо своей либе, либо той. Надо еще посмотреть под какой она там лицензией..


В той либе ошибки именно поддержки серверов. Самих серверов полно, и некоторые отдают данные по разному. Где-то в коде видел коммент, что это пока не поддерживается, то скоро будет. Так что возможно когда я закончу, они уже допилят. )))



—-
memento mori

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version