Как отправить данные клиенту с помощью conn.send () - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь создать простой чат-сервер. Я был в состоянии отправить информацию на сервер через клиента с помощью «client.send ()», но я не могу сделать то же самое сервер-> клиент

Я пытался использовать такие методы, как 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 Ответ

1 голос
/ 08 апреля 2019

Вы забыли использовать print() для отображения данных с сервера

while True:
    print( n.send("sending stuff") )

Кстати: на сервере вы отправляете одни и те же данные два раза - с conn.send() и conn.sendall()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...