Найти - Пользователи
Полная версия: Помогите мне решить проблему с приемом информации socket, пожалуйста
Начало » Python для новичков » Помогите мне решить проблему с приемом информации socket, пожалуйста
1
brainrtp
Привет, программисты! Мне нужна ваша помощь! Начал изучать 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')
Заранее спасибо. Если что-то не поняли, пишите, отвечу сразу)
terabayt
     if data ==  b'a':
https://docs.python.org/3.3/reference/lexical_analysis.html#encoding-declarations
brainrtp
terabayt
if data == b'a':
Благодарю1
brainrtp
terabayt
Хм… А почему действие продолжается? Разве оно не должно было закончится?
У меня выполняется к тому же else! Что не так? Что делать?
terabayt
 if not data:
заменить на
 elif not data:
brainrtp
terabayt
благодарю!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB