Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 4, 2021 23:52:39

ViRuss08
Зарегистрирован: 2021-01-23
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать переменную по сокету?

Я делаю мессенджер на питоне вот столкнулся с проблеммой:

 client.send(("              ").encode("utf-8"))
client.send(input(f"{id(name)}> ").encode("utf-8"))
client.send(("              ").encode("utf-8"))

Я собирался отправить инпутом указав в начале имя:name, которое мы указали в начале программы. Должно выглядеть так:

Джони228>Привет, как дела?
Привет, как дела?

АлахАкбр>Та ниче так..
Та ниче так..

АлахАкбр>слш, принеси пж кружку кота)
слш, принеси пж кружку кота)

НО! Переменная name не считывается и все! Получается как-то так:

>Как дела?
Как дела?

Нормально

Вообщем, как переменную name отправить другому человеку, только уже не в виде name(иначе переменная отправителя и читателя смешаются) а в виде name1 например.

 def listen_server():
    while True:
        data = client.recv(2048)
        a = print(data.decode("utf-8"))
def send_server():
    listen_thread = Thread(target=listen_server)
    listen_thread.start()
    while True:
        client.send(("              ").encode("utf-8"))
        client.send(input(f"{id(name)}> ").encode("utf-8"))
        client.send(("              ").encode("utf-8"))
import socket
from threading import Thread
print("Твой код может состоять максимум из 8 символов, ид цифр и букв.")
name = input("Введите код: ")
n1 = len(name)
if n1 > 8:
    name[0:8]
client = socket.socket(
    socket.AF_INET,
    socket.SOCK_STREAM,
)
client.connect(
    ("localhost", 25565)
)
if __name__ == '__main__':
    send_server()

Отредактировано ViRuss08 (Апрель 4, 2021 23:55:12)

Офлайн

#2 Апрель 5, 2021 10:13:27

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как передать переменную по сокету?

ViRuss08очевидно вам нужно “придумать” свой протокол передачи
или посмотреть как это сделано у других: https://github.com/dmitry-vs/python-messenger
Или для начала вставлять имя отправителя прямо во сообщени, тоесть передавать не “Привет, как дела?” а “Джони228>Привет, как дела?” Это конечно неправильно, но для начала и так сойдет, а потом как поймете как на самом деле должен работать месенджер исправите.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Апрель 5, 2021 10:16:47)

Офлайн

#3 Апрель 5, 2021 12:27:28

ViRuss08
Зарегистрирован: 2021-01-23
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать переменную по сокету?

Что значит “нужно придумать свой протокол передачи”, И как это работает? Не я посмотрел что на гит хабе вы мне кинули. Но там много-много непонятных батников, .py и тд., и там все это смотреть и понимать трудно будет. Ну не оч я понимаю

Офлайн

#4 Апрель 5, 2021 13:16:25

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1308
Репутация: +  112  -
Профиль   Отправить e-mail  

Как передать переменную по сокету?

ViRuss08
Что значит “нужно придумать свой протокол передачи”
Раньше письма писали, и на конвертах договорились писать кому,от кого,индекс, вне зависимости от того что внутри.Вот и здесь отправляйте кортеж или словарь или json где будут к примеру
 {"name":"xxx","message":"bla-bla"}
а в приемник будет доставать
  data['name'], data['message']

Онлайн

#5 Апрель 5, 2021 14:35:50

ViRuss08
Зарегистрирован: 2021-01-23
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать переменную по сокету?

Можешь подсказать как это делается пж

Офлайн

#6 Апрель 5, 2021 15:48:15

ViRuss08
Зарегистрирован: 2021-01-23
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать переменную по сокету?


Я нашел проблемму!

 client.send(("              ").encode("utf-8"))
client.send(input(f"{id(name)}> ").encode("utf-8"))
client.send(("              ").encode("utf-8"))
То что передается в инпуте, в самом сообщении не передается!)))
Я ржу просто!)
Тут сидел пол часа писал, следил за коментами. И тут такая тупая ошибка)

Офлайн

#7 Апрель 5, 2021 17:25:39

ViRuss08
Зарегистрирован: 2021-01-23
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать переменную по сокету?

Вообщем надо так:

 def listen_server():
    while True:
        time1 = time.strftime("%Y-%m-%d(%H.%M.%S)", time.localtime())
        data = client.recv(2048)
        print("["+time1+"] "+data.decode("utf-8"))
def send_server():
    listen_thread = Thread(target=listen_server)
    listen_thread.start()
    while True:
        client.send(("              ").encode("utf-8"))
        client.send((name + "> " + input(":::")).encode("utf-8"))
        client.send(("              ").encode("utf-8"))
import socket, time
from threading import Thread
print("Твой код может состоять максимум из 8 символов, ид цифр и букв.")
name = input("Введите код: ")
n1 = len(name)
if n1 > 8:
    name[0:8]
if name == "123098":
    name = "Юра"
if name == "112233":
    name = "Федя"
run = True
client = socket.socket(
    socket.AF_INET,
    socket.SOCK_STREAM,
)
if run == True:
    client.connect(
        ("localhost", 25565)
    )
    client.send((f"К нам присоединился {name}").encode("utf-8"))
    run = False
if __name__ == '__main__':
    send_server()

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version