Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 18, 2016 02:43:41

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

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

Привет, программисты! Мне нужна ваша помощь! Начал изучать socket'ы и не могу найти решение следующей проблемы. Как мне принять 2 разных сообщения и вывести их по отдельности?
Сервер отправляет клиенту 2 сообщения #1 & #2. Клиент их получает и выводит 2 разных сообщения по отдельности.
Систему отправки сообщений я реализовал вот так (сервер):

 import socket, sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'localhost'
port = 8011
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 ==  b'a':
        print ('test')
        conn.close()
    elif 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 = "Труе битч"
        message2 = "Сообщение #2"
        conn.send(message.encode('utf-8'))
        conn.send(message2.encode('utf-8'))
        conn.close()
tcp_socket.close()
Вот так у клиента:
 import socket, sys, struct
host = 'localhost'
port = 8011
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)
    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() 
Как мне отправить 2 сообщения и принять их по отдельности? Ну, что бы клиент не воспринимал это как одно сообщение, а что бы он понимал что это два разных сообщения и выводил сообщение #1 на 1-й строчке, а сообщение #2 на 2-й строчке.
Заранее спасибо!

Офлайн

#2 Авг. 18, 2016 03:03:54

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

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

это не совсем изучение…
вам бы основы программирования выучить а потом за сокеты братся

 import socket, sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'localhost'
port = 8011
addr = (host,port)
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_socket.bind(addr)
tcp_socket.listen(10)
print('\033[31mОжидание...\033[0m')
conn, addr = tcp_socket.accept()
while True:
    data = conn.recv(1024)
    if data ==  b'a':
        print ('test')
        conn.close()
    elif not data:
        print('\033[31mПустое сообщение от \033[32mIP:\033[0m', addr[0],'\033[32mПорт:\033[0m', addr[1])
        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 = "Труе битч"
        message2 = "Сообщение #2"
        conn.send(message.encode('utf-8'))
        conn.send(message2.encode('utf-8'))
conn.close()
tcp_socket.close()
 import socket, sys, struct
host = 'localhost'
port = 8011
addr = (host, port)
try:
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_socket.connect(addr)
except ConnectionRefusedError:
    print('\033[31m[ERROR] Невозможно поключиться к серверу.\033[0m')
    sys.exit(1)
while True:
    data = input('\033[32mЧто отправить серверу: \033[0m')
    if not data : 
       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")



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

Офлайн

#3 Авг. 18, 2016 12:55:28

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

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

@terabayt
Т.е это можно легко реализовать? Или у меня говно-код? Не могли бы вы уточнить, пожалуйста

Офлайн

#4 Авг. 22, 2016 12:20:36

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

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

ну я же реализовал)) код запустите тот что я выложил
ну говнокодом я бы не назвал, но и не совсе правильный



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version