#python #python-3.x #sockets
#python #python-3.x #сокеты
Вопрос:
Я пытаюсь создать простой сервер чата. Я смог отправить информацию на сервер через клиента, используя ‘client.send()’, но, похоже, я не могу сделать то же самое server-> client
Я пробовал использовать такие методы, как conn.send() и conn.sendall(), но (я думаю, поскольку код находится в процессе попытки), они, похоже, пропускаются после первоначального conn.send (str.encode(«Connected»))
Серверный код
import socket
from _thread import *
import sys
server = "192.168.0.4"
port = 5555
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.bind((server, port))
except socket.error as e:
str(e)
s.listen(2)
print("Waiting for a connection, Server Started")
def threaded_client(conn):
conn.send(str.encode("Connected"))
reply = ""
while True:
conn.send(str.encode(str(reply)))
try:
data = conn.recv(2048*1)
reply = data.decode("utf-8")
if not data:
print("Disconnected")
break
else:
print("Received: ", reply)
print("Sending : ", reply)
conn.sendall(str.encode(reply)) #Where I want to send information to the client
except:
break
print("Lost connection")
conn.close()
while True:
conn, addr = s.accept()
print("Connected to:", addr)
start_new_thread(threaded_client, (conn,))
клиентский код
import socket
class Network:
def __init__(self):
self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server = "192.168.0.4"
self.port = 5555
self.addr = (self.server, self.port)
self.id = self.connect()
print(self.id)
def connect(self):
try:
self.client.connect(self.addr)
return self.client.recv(2048).decode()
except:
pass
def send(self, data):
try:
self.client.send(str.encode(data))
return self.client.recv(2048).decode()
except socket.error as e:
print(e)
from network import Network
n = Network()
while True:
n.send("sending stuff") #this works/sends properly
Комментарии:
1. вы забыли отобразить его
print( n.send("sending stuff") )
Ответ №1:
Вы забыли использовать print()
для отображения данных с сервера
while True:
print( n.send("sending stuff") )
Кстати: на сервере вы отправляете одни и те же данные два раза — с conn.send()
и conn.sendall()