Форум сайта python.su
0
Привет, программисты! Мне нужна ваша помощь! Начал изучать 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()
Офлайн
103
это не совсем изучение…
вам бы основы программирования выучить а потом за сокеты братся
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")
Офлайн
0
@terabayt
Т.е это можно легко реализовать? Или у меня говно-код? Не могли бы вы уточнить, пожалуйста 
Офлайн
103
ну я же реализовал)) код запустите тот что я выложил
ну говнокодом я бы не назвал, но и не совсе правильный
Офлайн