Клиенты не получают данные с сервера Python

1

Я новичок в Python. Я пишу серверную программу и клиентскую программу. Здесь сервер играет роль распределения данных между несколькими клиентами. Это прекрасно работает. Моя задача - распространять данные с сервера с помощью файла server.py. Когда кто-нибудь из клиентов захочет, он просто запустит client.py на своем ноутбуке и получит результаты. Но здесь Сервер начинает распространять данные. IP, используемый сервером, был 127.0.1.1. Это не берет сеть, предоставленную IP. Как заставить это использовать ip, предоставленный LAN. Когда клиенты с другого компьютера исполняют файл clients.py. Это показывает, что ошибка соединения отклонена. Обратите внимание, что мы все связаны в локальной сети. Как это решить и заставить клиентов получать данные.

Вот пример кода клиента:

import socket
import os
from threading import Thread


import socket
import time

s = socket.socket()  
host = '127.0.1.1'  
port = 10016
print(host)


s.connect((host, port))
while True:
    print(s.recv(1024))
s.close() 

Пример кода сервера:

import socket
import os
from threading import Thread
import thread
import threading
import time
import datetime

def listener(client, address):
    print ("Accepted connection from: ", address)
    with clients_lock:
        clients.add(client)
    try:    
        while True: 
            client.send(a)
            time.sleep(2)   

    finally:
        with clients_lock:
            clients.remove(client)
            client.close()

clients = set()
clients_lock = threading.Lock()

host = socket.gethostname()
port = 10016

s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host,port))
s.listen(3)
th = []
print ("Server is listening for connections...")
while True:
    client, address = s.accept()
    timestamp = datetime.datetime.now().strftime("%b %d %Y,%a, %I:%M:%S %p")
    a = "Hi Steven!!!" + timestamp
    th.append(Thread(target=listener, args = (client,address)).start())
s.close()
  • 1
    Используйте адрес хоста 0.0.0.0 на сервере.
  • 0
    Нет .. Это все еще показывает, что Ошибка соединения отклонена на стороне Клиента
Показать ещё 7 комментариев
Теги:
python-3.x
sockets
client-server

2 ответа

1
Лучший ответ

Наконец нашел ответ

В содержимом файла "/etc/hosts" у меня есть сопоставление IP-адреса с "127.0.1.1" для моего имени хоста. Это вызывает разрешение имени, чтобы получить 127.0.1.1. Я прокомментировал эту строку. Теперь это работает. Каждый в моей локальной сети может получить данные

Код сервера:

import socket
import os
from threading import Thread
import thread
import threading
import time
import datetime

def listener(client, address):
    print ("Accepted connection from: ", address)
    with clients_lock:
        clients.add(client)
    try:    
        while True: 
            client.send(a)
            time.sleep(2)   

    finally:
        with clients_lock:
            clients.remove(client)
            client.close()

clients = set()
clients_lock = threading.Lock()

host = socket.gethostname()  # it gets ip of lan
port = 10016

s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host,port))
s.listen(3)
th = []
print ("Server is listening for connections...")
while True:
    client, address = s.accept()
    timestamp = datetime.datetime.now().strftime("%b %d %Y,%a, %I:%M:%S %p")
    a = "Hi Steven!!!" + timestamp
    th.append(Thread(target=listener, args = (client,address)).start())
s.close()

Код клиента:

import socket
import os
import time

s = socket.socket()  
host = '192.168.1.35' #my server ip 
port = 10016
print(host)


s.connect((host, port))
while True:
    print(s.recv(1024))
s.close() 
  • 0
    Пара комментариев: в стандартной библиотеке нет модуля с именем thread (поэтому я удалил его). Я должен был изменить строку a = "Hi Steven!!!" + timestamp на сервере в a = ("Hi Steven!!!" + timestamp).encode() чтобы избежать a = ("Hi Steven!!!" + timestamp).encode() TypeError: a bytes-like object is required, not 'str' в client.send(a) . У меня нет сопоставления IP-адреса с '127.0.1.1' для моего имени хоста, но оно все равно работало с клиентом, работающим локально (с другими исправленными вещами).
0

сконфигурируйте ip, предоставленный LAN, для client.py(ip в LAN, например: 192.168.122.33)

host = 'ip provided by LAN'
  • 0
    Нет, это не соединение. По-прежнему показывает ошибку подключения. Мои данные работали на сервере ip.
  • 0
    Возможно ли, что ваш клиент не может получить доступ к серверу на локальной сети? Брандмауэр закрыт?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню