Найти - Пользователи
Полная версия: Помогите мне решить проблему с приемом информации socket, пожалуйста #2
Начало » Python для новичков » Помогите мне решить проблему с приемом информации socket, пожалуйста #2
1
brainrtp
Привет, программисты! Мне нужна ваша помощь! Начал изучать 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-й строчке.
Заранее спасибо!
terabayt
это не совсем изучение…
вам бы основы программирования выучить а потом за сокеты братся

 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")
brainrtp
@terabayt
Т.е это можно легко реализовать? Или у меня говно-код? Не могли бы вы уточнить, пожалуйста
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