Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 16, 2016 21:48:36

brainrtp
Зарегистрирован: 2016-06-24
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите мне решить проблему с приемом информации socket, пожалуйста

Привет, программисты! Мне нужна ваша помощь! Начал изучать socket'ы и не могу найти решение следующей проблемы. Мне нужно получить от клиента сообщение ‘a’ и что бы выполнилось какое-то действие.
Вот мой код:
Клиент:

 import socket, sys, struct
host = 'localhost'
port = 8013
addr = (host, port)
while True:
    try:
        tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        tcp_socket.connect(addr)
    except ConnectionRefusedError:
        print('\033[31m[ERROR] Невозможно поключиться к серверу.\033[0m')
        break
    data = input('\033[32mЧто отправить серверу: \033[0m')
    if not data : 
       tcp_socket.close() 
       sys.exit(1)
    elif data == 'close' or data =='c': 
       tcp_socket.close() 
       sys.exit(1)
    data = str.encode(data)
    tcp_socket.send(data)
    data = bytes.decode(data)
    data = tcp_socket.recv(1024)
    if not data:
        print('\033[32mПриняли:\033[31m \033[31mпусто.\033[0m')
    else:
        print('\033[32mПриняли:\033[31m',data.decode('utf-8'),"\033[0m"
tcp_socket.close() 
Сервер:

 import socket, sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'localhost'
port = 8013
addr = (host,port)
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_socket.bind(addr)
tcp_socket.listen(10)
while True:
    print('\033[31mОжидание...\033[0m')
    conn, addr = tcp_socket.accept()
    data = conn.recv(1024)
    if data ==  'a':
        print ('123')
    if not data:
        print('\033[31mПустое сообщение от \033[32mIP:\033[0m', addr[0],'\033[32mПорт:\033[0m', addr[1])
        conn.close()
        break
    else:
        print('\033[32mIP:\033[0m', addr[0],'\033[32mПорт:\033[0m', addr[1])
        print('\033[32mСообщение:\033[0m',data.decode('utf-8'))
        print('\033[32mСообщение без utf-8:\033[0m',data)
        message = "Труе битч"
        conn.send(message.encode('utf-8'))
        conn.close()
tcp_socket.close()
В коде сервера есть такая строчка:
     if data ==  'a':
        print ('123')
Проблема в том, что она не работает! :c
Даже вот это не работает:
     if data ==  'b\'a\'':
        print ('123')
Заранее спасибо. Если что-то не поняли, пишите, отвечу сразу)

Отредактировано brainrtp (Авг. 16, 2016 21:51:16)

Офлайн

#2 Авг. 16, 2016 22:02:58

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Помогите мне решить проблему с приемом информации socket, пожалуйста

     if data ==  b'a':
https://docs.python.org/3.3/reference/lexical_analysis.html#encoding-declarations



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Авг. 16, 2016 22:04:40)

Офлайн

#3 Авг. 16, 2016 22:05:14

brainrtp
Зарегистрирован: 2016-06-24
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите мне решить проблему с приемом информации socket, пожалуйста

terabayt
if data == b'a':
Благодарю1

Офлайн

#4 Авг. 16, 2016 22:08:29

brainrtp
Зарегистрирован: 2016-06-24
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите мне решить проблему с приемом информации socket, пожалуйста

terabayt
Хм… А почему действие продолжается? Разве оно не должно было закончится?
У меня выполняется к тому же else! Что не так? Что делать?

Офлайн

#5 Авг. 16, 2016 22:34:51

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Помогите мне решить проблему с приемом информации socket, пожалуйста

 if not data:
заменить на
 elif not data:



————————————————
-*- Simple is better than complex -*-

Офлайн

#6 Авг. 16, 2016 23:09:24

brainrtp
Зарегистрирован: 2016-06-24
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите мне решить проблему с приемом информации socket, пожалуйста

terabayt
благодарю!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version