Как отправить данные клиенту с помощью conn.send()

#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()